【发布时间】:2015-08-31 03:05:35
【问题描述】:
我在处理我的工作应用程序中的一些错误 SQL 调用时遇到了麻烦。我一直在阅读索引、调整和基准测试。以下是我收集的一些规则(如果这听起来正确,请告诉我):
对于频繁使用的查询,将查询归结为仅需要的内容,然后重新编写
where语句以首先使用最常用的列。然后在 where 语句中使用的列上创建一个非聚集索引,并对任何剩余的选择列执行 INCLUDING(当然不包括像nvarchar(max)这样的大列)。如果查询要返回 > 20% 的条目表内容,最好进行表扫描而不使用索引
索引中的顺序很重要。您必须确保像构建索引一样构建您的 where 语句。
现在我在查找信息时遇到问题的一件事是,如果查询正在选择不属于任何索引但使用 where 语句的列,该怎么办?是否使用了索引并且叶节点命中了表并查看了关联的行?
例如:表格
Id col1 col2 col3
CREATE INDEX my_index
ON my_table (col1)
SELECT Id, col1, col2, col3
FROM my_table
WHERE col1 >= 3 AND col1 <= 6
这里使用my_index 吗?如果是这样,它如何解析 Id、col2、col3?它是否指向表行并获取值?
【问题讨论】:
-
where 子句中事物的顺序根本不重要,否则这一切听起来都不错。
-
它可能会被使用 - 在让 SQL Server 的查询优化器试一试并查看之前,您通常无法真正判断
标签: sql sql-server indexing include