我有一个sql查询,运行超快,大约一秒,当不使用变量,如:
WHERE id BETWEEN 5461094 and 5461097
但是当我有:
declare @firstId int declare @lastId int set @firstId = 5461094 set @lastId = 5461097 ... WHERE id BETWEEN @firstId and @lastId
...查询运行速度很慢,仅在几分钟后完成.为什么会这样?我需要使用变量.我可以做任何改进以避免这种性能问题吗?
好,
您是优化工具,查询计划是一种工具.
我会给你一个询问,你必须选择车辆.
图书馆中的所有图书都有序号
我的查询是去图书馆,给我3到5之间的所有书籍
你可以选择一辆正确,快速,便宜,高效且足以携带3本书的自行车.
新查询.
去图书馆,获取@x和@y之间的所有书籍.
选车.
前进.
这就是发生的事情.如果我要求1和Maxvalue之间的书籍,你会选择自卸卡车吗?如果x = 3且y = 5,那就太过分了.SQL必须在看到数字之前选择计划.
这是因为当值被硬编码时,它可以查找它对表中数据的统计信息,并找出要运行的最佳查询.查看每个查询的执行计划.使用变量时必须扫描.
如果范围总是很小,您可以使用索引提示来帮助它.