sql - 在时间范围内的一天中搜索时,哪个日期比较更有效?
问题描述
在查询表以按一天获取数据时,我发现了 2 个选项。
假设我想获取 2020-01-01 的所有数据和名为“CreatedDate”的日期列,这是一个日期时间。
我的“WHERE”可以是:
Where CreatedDate between '2020-01-01' and '2020-01-02'
但是我开始使用以下格式:
Where CAST(CreatedDate as date) = '2020-01-01'
我发现 2 选项更“友好”,因为我正在与更具可读性的单个值进行比较。
我想知道需要 cast 的格式是否会消耗更多的计算资源并且会增加查询权重?
解决方案
他们做不同的事情。第一个在 2020-01-02 午夜获取数据。等价的逻辑是:
where CreatedDate >= '2020-01-01' and
CreatedDate < '2020-01-02'
至于你的问题,你应该在你的数据和系统上测试这两个版本。两个版本都将使用索引,(CreatedDate)
因为 SQL Server 允许使用索引转换为日期。从使用索引的角度来看,它们是等价的。
也就是说,如果没有索引,日期转换可能会有一点开销,因此在这种情况下,第二个版本可能会慢一些。
推荐阅读
- powershell - IF 在函数中不起作用(PowerShell)
- c++ - 在 Visual Studio 2017 中构建 Qt 可执行文件
- ssh - 对远程服务器执行 ssh 时如何在密码中转义 @?
- android - Fluttter 警报管理器缺少插件异常
- c++ - C++ 扩展 Ascii 和负值
- javascript - JavaScript - 计算属性 - 深深的困惑
- javascript - Unable to Returning function to main HTML body javascript
- javascript - 如何将数据从一个组件ajax响应传递到另一个组件状态reactjs?
- python - python argparse - 如何允许解析器处理标志和非标志参数
- javascript - List files in a directory with PHP and JavaScript