我在我的數據庫中有一個巨大的表,其中包含城市之間的距離。這使我的應用程序能夠在選擇起始城市時查找世界各地的附近城市。針對大型SQL Server表執行不同的兩個類似查詢
它包含4列:
ID, StartCityID, EndCityID, Distance
,幷包含大約120萬行。
我有索引建立在startcityID
,endcityID
,另一個用於兩個,每個另一個用於startcity + distance
,並且endcity + distance
(這是我使用索引的第一個真正的交易所以不是100%肯定,如果我做它正確)。
反正 - 我做了以下2個查詢:
Select distinct StartCityID
From Distances where EndCityID = 23485
和
Select distinct EndCityID
From Distances where StartCityID = 20045
他們都返回相同數量的cityID
的,但前一個需要35秒鐘做,和最下面的一個立即返回結果。當我查看索引時,他們似乎被設置爲以相同的方式服務startCity
和endCity
。
任何人都知道他們爲什麼會採取不同的行爲?我不知所措......
NB - 這可能會提供更深入的瞭解,但需要35秒一個 - 如果我按執行同樣具有相同的ID直線距離,它返回結果立即以及那個時候。
不幸的是,這不是我的網站,但它可能是有用的信息。
感謝
你是否看了**執行計劃** SQL Server將告訴你(在管理工作室)兩個查詢和比較那些? – 2012-07-24 09:36:20
您是否在每次測試之間執行了DBCC FREEPROCCACHE? – podiluska 2012-07-24 09:37:15
嗨馬克 - 謝謝 - 我不知道執行計劃,那太棒了。它顯示了Gulli Meel在下面描述的 - 我有一個StartHub/EndHub索引,但不是相反。非常感謝。 – 2012-07-24 09:46:39