这是最快的日期比较方式

时间:2018-05-30 09:29:05

标签: sql-server tsql

有一个列是日期类型,但过程中传递的参数是一个字符串,所以我可以将此列转换为字符串或将传递的参数转换为日期然后比较它们吗?

2 个答案:

答案 0 :(得分:0)

很容易理解这一点:

如果你保留一个字符串SQL将为每一行,必须将日期(时间)列的值转换为字符串,然后然后比较。在具有数百万行的表上,这将是一项昂贵的操作,因为它需要为每一行执行此操作。

如果将字符串参数转换为日期时间,SQL可以与每行的转换值进行直接比较。

除了上面的内容之外,只要停下来思考它就可以很简单地理解,有很多陷阱如Larnu1 pointed out;只有平等才会起作用(最好的情况),大于,小于,在这之间会有所不同。

此外,日期(时间)比较会快得多,因为它是一个8字节 * 值,可以与CPU上的单个指令(或非常少)进行比较,而不是必须迭代字符串中的所有字符以进行比较。

查找Sargeability;另一个转换为datetime的参数。

最好是完全摆脱字符串,并期望通过日期时间。这使得您的界面更清楚地传达您需要的内容(并且还排除了日期/时间转换的问题,如6月2日,6月2日或2月6日或......?)。

* 根据您使用的确切日期时间类型,这可能会有所不同。

答案 1 :(得分:0)

将参数转换为日期更快

  1. Date是具有固定长度的整数数据类型。因此,除了非常短的字符串之外,比较更快。

  2. 转换总是需要时间。转换一次值比转换一次n次更快。

  3. 此外:转换为字符串并直接比较只允许您比较相等或不等。不小于或大于等。