sql-server - 这是最快的日期比较方式
问题描述
有一列是日期类型,但是程序中传递的参数是字符串,我可以将此列转换为字符串还是将传递的参数转换为日期然后比较它们?
解决方案
很容易推理出这个:
如果你保留一个字符串,SQL 将对于每一行都必须将日期(时间)列的值转换为字符串,然后进行比较。在具有数百万行的表上,这将是一项昂贵的操作,因为它需要对每一行都执行此操作。
如果将字符串参数转换为日期时间,SQL 可以直接与每一行的转换值进行比较。
除了以上这些,只要停下来思考一下就可以很简单地推理出来,还有很多像Larnu1 指出的陷阱;只有相等才会起作用(最好的情况),大于,小于,之间,这样就不会像预期的那样起作用。
此外,日期(时间)比较会快很多,因为它是一个 8 字节*值,可以与 CPU 上的单个指令(或很少)进行比较,而不必迭代字符串中的所有字符进行比较.
查找Sargeability ; 转换为日期时间的另一个参数。
最好的办法是一起摆脱字符串并期望通过日期时间。这使您的界面更清楚地传达了您的需求(并且还排除了日期/时间转换的问题,例如 2020 年 6 月 2 日,是 6 月 2 日还是 2 月 6 日还是...?)。
*根据您使用的确切日期时间类型,这可能会有所不同。
推荐阅读
- python - 如何重用命令函数 discord.py
- jmeter - 如何保存表格数据,例如:最小值、最大值、平均值、90%、吞吐量等
- python - 当我选择 btn 时,小部件工具箱引擎会执行一个 python 文件
- axapta - 在 AX 中创建特定于公司的下拉菜单
- angular - Angular PWA 和 NGRX .. 离线获取数据
- python - 使用机器人框架单击动态 Web 表中的元素
- javascript - 如何使用 Ajax 在下拉列表中捕获数据
- excel - 如何在Excel中选择更改后清除相关的下拉列表单元格
- android - 未连接适配器;使用firebase数据库跳过片段中的布局
- kubernetes - 使用来自 Kubernetes Metric 服务器的 PromQL (prometheus) 列出 Grafana 上的命名空间名称、命名空间年龄和状态