【问题标题】:SQL Server Index Help. How to speed up both WHERE and ORDER BYSQL Server 索引帮助。如何加快 WHERE 和 ORDER BY
【发布时间】:2017-03-03 00:41:56
【问题描述】:

谢谢你帮助我。我有我从中选择的索引视图。我创建了一个非聚集索引,但查询有 WHERE 谓词和 ORDER BY 要求。如果我将 WHERE 中的列放在索引上,那么 ORDER BY 很慢,反之亦然。我能找到的最好的方法是混合,但速度并不是我想要的。

例如是这样的:

SELECT apple, banana
FROM indexViewFood
WHERE pickingDate BETWEEN '09/01/2016' AND '10/02/2016' 
  AND aid IN (1,2,3,4)
  AND bid IN (11,12,13,14)
ORDER BY apple, banana

现在,我有pickDate的索引,然后是apple:

CREATE INDEX ix_food ON (pickingDate, apple) INCLUDE (banana, aid, bid)

索引查找的成本为 3%,而排序的成本为 90%。如果我放一个(aid,pickDate)的索引,执行时间会更长。

查询必须按这些名称排序。真正的查询从多个表中选择作为左连接。所有额外的数据都必须减慢排序操作。当前运行时间为五分钟。

我可以尝试其他索引组合吗?当涉及到 WHERE 和 ORDER By 组合时,我可以尝试其他方法吗?再次感谢您

【问题讨论】:

  • 您是否尝试过使用索引调整向导?
  • 是的,有时我不相信它。 (aid,pickDate)的索引比我现在的要慢
  • 未过滤视图返回多少行?查询返回多少行?
  • 我在创建索引视图时已经添加了过滤器。当我进行测试时,我添加了所有参数。所以总行数是 9,855,256
  • 尝试索引采摘日期、苹果、香蕉,包括辅助和出价。 PickingDate 将帮助过滤器,apple,banana 将强制扫描中的排序顺序(因此不需要单独的排序步骤),并且包括辅助和投标将使索引无需任何主键查找即可使用

标签: sql-server indexing sql-order-by query-optimization where


【解决方案1】:

我的问题下方的每个建议都有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    相关资源
    最近更新 更多