2011-02-14 53 views
1

這裏是我堅持的查詢:需要指數,使這個SQL查詢的運行速度

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

它是緩慢的,並在99%的粉碎我的CPU。我知道索引會幫助,但不知道是什麼類型,或者如果它應該是兩個索引或1包括兩列。

+1

你看過查詢計劃嗎? – Pointy 2011-02-14 15:55:12

回答

0

三個索引可能每個在一個列上。這假設您的查詢相對於表的大小來說都是非常有選擇性的。

如果你告訴我們你的表模式和現有索引的細節(如果你沒有另外指定,你的PK將默認得到一個聚集索引)以及關於表/選擇性大小的一些細節,會有幫助。

顧客

SalesmanId  
TelephoneNum 

SalesmanCustomers

SalesmanName 
0

查看查詢執行計劃並查看是否有任何表掃描正在進行。這將幫助您確定您需要的索引。

0

我想,除了由@馬丁,上CustomerNum索引建議列還需要自順序使用按條款。

如果您有很多記錄,OrderBy需要很長時間。您也可以嘗試在沒有orderby的情況下運行查詢,並查看需要多少時間。