【发布时间】:2011-03-27 08:34:09
【问题描述】:
我正在查看一个麻烦查询的执行计划。
我可以看到 45% 的计划用于对包含七 (7) 行数据的表进行表扫描。
我即将在一个有七行的表上放置一个聚集索引来覆盖我的查询中的列,但感觉……错了。鉴于表如此之小,我的查询的这一部分如何占用这么多计划?
我正在阅读here,感觉这可能只是因为数据不连续 - 有问题的表上根本没有索引。总的来说,尽管我们的数据库很大(7GB)而且很忙。
我很想知道其他人的想法 - 谢谢!
编辑:
查询非常频繁地运行并且涉及死锁(并被选为受害者)。现在运行需要 300 毫秒到 500 毫秒,但是当数据库更忙时会花费更长的时间。
查询:
select l.team1Score, l.team2Score, ls.team1ExternalID, ls.team2ExternalID, et.eventCategoryID, e.eventID, ls.statusCode
from livescoretracking l(nolock)
inner join liveScores ls (nolock) on l.liveScoreID = ls.liveScoreID
inner join db1.dbo.events e on e.gameid = ls.gameid
inner join db1.dbo.eventtype et (nolock) on e.eventTypeID = et.eventTypeID
inner join eventCategoryPayTypeMappings ecb (nolock) on ( et.eventCategoryID = ecb.eventCategoryID and e.payTypeID = ecb.payTypeID and ecb.mainEvent = 1 )
where ls.gameID = 286711 order by l.dateinserted
问题表是 eventCategoryPayTypeMappings 表 - 谢谢!
【问题讨论】:
-
如果查询运行速度很快,那么 45% 不是问题。查询需要多长时间?
-
你写信给桌子吗?如果你做,多少钱?您是否有大列,例如 blob?
-
@Albin - 表不会增长,我们没有任何 BLOB/CLOB 数据类型。
-
我注意到您的查询中使用了
db1.dbo。这是否意味着这些表与其他表不在同一个数据库中,或者是从链接服务器调用的? -
@Thomas - 确实,它们是跨数据库连接。
标签: sql optimization sql-server-2000 performance