【问题标题】:Simple select query taking too long简单的选择查询耗时太长
【发布时间】:2012-04-30 06:41:33
【问题描述】:

我有一个表,某周有大约 18k 行,另一周有 22k 行。

我正在使用视图和索引来检索数据,就像这样

SELECT TOP 100 * FROM my_view 
WHERE timestamp BETWEEN @date1 AND
@date2

但不知何故,有 22k 的一周检索数据的速度更快(大约 3-5 秒),而另一个则至少需要一分钟。这些导致我的 wcf 超时。我错过了什么?

【问题讨论】:

  • 您是否检查了查询的执行计划以查看是否正在使用索引?
  • 在不给出表定义和相应索引的情况下如何获得答案?
  • 这个问题和WCF有什么关系?
  • @hugh 查询时间过长导致 wcf 超时
  • @MiikaL。我已经确认它对两个查询都使用索引

标签: sql-server


【解决方案1】:

在时间戳字段上应用索引。

如果您已经有时间戳索引,请检查执行计划中用于此查询的索引。

索引提示只会在您的查询涉及连接表并且用于连接到另一个表的列与多个索引匹配的情况下发挥作用。在这种情况下,数据库引擎可能会选择使用一个索引来进行连接,并且从调查中您可能会知道,如果它使用另一个索引,则查询将执行得更好。在这种情况下,您需要提供索引提示,告诉数据库引擎使用哪个索引。

示例代码使用索引提示:

select [Order].[OrgId], [OrderDetail].[ProductId]
  from [Order] 
 inner join [OrderDetail] **with(index(IX_OrderDetail_OrderId))** on [Order].[OrderId] = [OrderDetail].[OrderId]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-08
    • 2018-12-17
    • 1970-01-01
    • 2020-11-06
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多