需要索引使这个SQL查询运行得更快

时间:2011-02-14 15:52:20

标签: sql-server indexing

这是我坚持的查询:

SELECT *
FROM   customers
WHERE  salesmanid = @salesrep
        OR telephonenum IN (SELECT telephonenum
                            FROM   salesmancustomers
                            WHERE  salesmanname = @salesrepname)
ORDER  BY customernum  

很慢,我的CPU压缩率为99%。我知道索引会有所帮助,但不确定它是什么类型,或者它应该是2个索引还是包含两个列的1个。

3 个答案:

答案 0 :(得分:0)

查看查询执行计划,看看是否有任何表扫描正在进行。这将帮助您确定所需的索引。

答案 1 :(得分:0)

可能每个列都有三个索引。这假设您的查询相对于表的大小都是非常有选择性的。

如果您告诉我们您的表模式以及现有索引的详细信息(如果您没有另外指定,您的PK将默认获得聚簇索引)以及有关表/选择性大小的一些详细信息,这将有所帮助。 / p>

<强>客户

SalesmanId    
TelephoneNum   

<强> SalesmanCustomers

SalesmanName

答案 2 :(得分:0)

我认为除了@Martin建议的列之外,还需要 CustomerNum 的索引,因为它在order by子句中使用。

如果您有大量记录,OrderBy需要花费大量时间。您也可以尝试在没有orderby的情况下运行查询,并查看需要多长时间。