我在我的数据库中有一个巨大的表,其中包含城市之间的距离。这使我的应用程序能够在选择起始城市时查找世界各地的附近城市。针对大型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