SQL Server中按指定日期查询数据的最快方法是哪种?
SQL Server中指定日期行查询的性能对比
针对你列出的三种查询指定日期行的方法,性能差异如下:
方法1:
WHERE myColumn BETWEEN '2020-10-10T00:00:00.000' AND '2020-10-10T23:59:59.997'
这是性能最优的方案。因为直接对myColumn进行范围比较,如果该列有索引,SQL Server可以直接利用索引快速定位数据,避免全表扫描。注意:DateTime类型的精度是3.33毫秒,23:59:59.999会被四舍五入到次日的00:00:00.000,可能误包含第二天的数据,建议把结束时间改成23:59:59.997。方法2:
WHERE CAST(myColumn AS date) = '2020-10-10'
这种写法虽然简洁,但因为对myColumn使用了CAST函数,会导致索引失效(除非提前创建了基于CAST(myColumn AS date)的计算列索引)。SQL Server需要扫描整个表,对每一行的myColumn做类型转换后再比较,数据量较大时性能会明显下降。方法3:
WHERE myColumn LIKE '%2020-10-10%'
这是性能最差的方案。首先,前导通配符%会让索引完全无法发挥作用,必须进行全表扫描;其次,将DateTime类型当作字符串进行模糊匹配本身不符合类型规范,可能因为日期格式问题匹配到错误数据,完全不推荐使用。
总结:如果myColumn有索引,修正后的方法1速度最快;即使没有索引,方法1的性能依然优于另外两种。
内容的提问来源于stack exchange,提问作者viktor nagla
相关产品推荐
相关产品推荐

