【发布时间】:2014-02-03 11:57:17
【问题描述】:
这个查询优化了吗?
SELECT
ElementID,
AVID,
ElementName
FROM
Element
WHERE
AVID = 36 OR AVID = 56 OR AVID = 57 OR AVID = 58 OR AVID = 59 OR AVID = 60
OR AVID = 61 OR AVID = 74 OR AVID = 208 OR AVID = 220 OR AVID = 304
OR AVID = 263 OR AVID = 416 OR AVID = 250 OR AVID = 335 OR AVID = 150
OR AVID = 356 OR AVID = 362 OR AVID = 382 OR AVID = 404 OR AVID = 609
OR AVID = 642 OR AVID = 643 OR AVID = 572 OR AVID = 656 OR AVID = 678
OR AVID = 685 OR AVID = 697 OR AVID = 766 OR AVID = 786 OR AVID = 629
AVID 是表中的外键。 ElementID 是主键。 AVID 的值由 UI 根据用户选择生成,因此无法使用 JOINS。我收到AVID 作为逗号分隔值(csv),我有一个小实用程序,它使用AVID csv 生成这个查询。这些AVID 的数量超过了 1000 个。
我使用的是 SQL Server 2008 R2,并且查询是从 Web 浏览器界面执行的,因此存储过程对我没有帮助。
所以我想知道这个查询是否经过优化或如何进一步优化?
【问题讨论】:
-
你为什么不用
IN?它当然更具可读性,并且不应该影响性能。甚至可能更快,因为它应该使查询分析器更容易优化执行。无论如何,我的猜测是查询本身并没有太多需要优化的地方,而是索引会有所作为。 -
IN 在比较次数超过一定限制时有限制
标签: sql sql-server-2008-r2 query-optimization