sql - 如果将日期过滤器从字符串文字更改为日期变量,性能会变差
问题描述
我有一个要在日期范围内运行的查询,但我要查询的表没有日期索引,因此没有最佳性能。
所以为了测试它,我加入了一个日历表(calendarid = calendarid),它确实有一个日期索引,并且性能变得更好(从 6-7 秒到 1-2 秒)。
但是当我实际在我的存储过程中实现时,我没有帮助,仍然需要 7 秒,这是非常有趣的原因。
在测试和玩耍之后,我发现如果我用字符串文字进行过滤,说'05/10/2018'
执行时间会下降到 2 秒(这就是为什么在测试中它很快),但是如果我过滤变量@DateFrom
,时间会增加到 7 秒。
为了验证它,检查了执行计划,对于日期字符串过滤器,它只扫描日期索引上的日历表一次,然后连接其他表。但是对于变量,它会在日历表上进行两次扫描,一次扫描主键,第二次扫描日期索引,然后将它们连接起来。
所以我在这里有两个问题
- 为什么变量需要更长的时间
- 是否有解决性能的解决方案
我添加了执行计划的图片,首先是字符串日期过滤器'05/10/2018'
,其次是日期变量过滤器@DateFrom
解决方案
推荐阅读
- android - 如何在android中修复“无法解析rxkotlin”
- python - 将带有列名的数据框单独附加到另一个带有数据的数据框
- reactjs - 在 redux 操作中调用作为参数传递的组件方法是错误的吗?
- android - 未在膨胀视图的 TextView 中设置文本
- java - 使用 Tosca 执行 Selenium 脚本
- ruby - 如何使用 case 语句循环遍历对象数组并向数组内的键添加值?
- apache-spark - Spark Join 数据框并有条件地更新列
- javascript - 链接承诺但具有不同的参数
- python - leetcode Python 编码问题的 TypeError
- python - 如何 Python 网络爬取(无标签、无 div 名称、无类名)