Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server执行计划索引查找_Sql Server_Sql Execution Plan - Fatal编程技术网

Sql server SQL Server执行计划索引查找

Sql server SQL Server执行计划索引查找,sql-server,sql-execution-plan,Sql Server,Sql Execution Plan,我试图改进两个查询,它们几乎与索引相同。我在第一个查询中看到了一个表扫描,并创建了一个索引来进行索引查找。当我看到第二个查询时,SQL Server指示创建的索引等于我上次创建的索引,只是更改了列的顺序,但在执行计划中,SQL Server引擎已经在表上执行索引查找 我的问题是: 如果SQL Server执行计划已经是索引搜索,我是否应该为此查询创建另一个索引,我是否应该删除已创建的索引并替换为另一个索引,或者我是否应该忽略SQL Server提供的建议?如果没有具体细节,就无法回答。这不是一个

我试图改进两个查询,它们几乎与索引相同。我在第一个查询中看到了一个表扫描,并创建了一个索引来进行索引查找。当我看到第二个查询时,SQL Server指示创建的索引等于我上次创建的索引,只是更改了列的顺序,但在执行计划中,SQL Server引擎已经在表上执行索引查找

我的问题是:


如果SQL Server执行计划已经是索引搜索,我是否应该为此查询创建另一个索引,我是否应该删除已创建的索引并替换为另一个索引,或者我是否应该忽略SQL Server提供的建议?

如果没有具体细节,就无法回答。这不是一个猜谜游戏。请发布准确的表结构、表大小、添加的索引和执行计划

添加索引并不意味着您添加了最佳索引。执行计划使用索引搜索这一事实也不意味着该计划是最优的。错误的索引列顺序和部分谓词匹配将在前导列上显示为“seek”,这将是次优的,SQL将继续推荐更好的索引(即您描述的症状)

请阅读和阅读

我在第一个查询中看到了一个表扫描,并创建了一个索引,使之成为索引查找

所有搜索都不好,所有扫描都不坏。

假设您有一个customers表,其中有10个customers,每个customers有1000个订单,现在orders表中的行总数为10000行

要为每个客户获得前1个订单,如果您的查询正在扫描订单表,则可能是错误的,因为执行seek只需要花费10次seek

你必须理解这些数据,看看优化器为什么选择这个计划,以及你如何让优化器选择你需要的计划。伊齐克·本·甘给出了惊人的l,还有一个


Craig Freedman进一步讨论了搜索和扫描部分,并详细介绍了为什么可能会选择扫描而不是搜索,因为随机读取,数据密度

在添加第一个索引后,Query2是否以可接受的速度运行?@Simon是的,它运行谢谢,我会看到你发布的链接。我知道正义的原因是索引搜索,并不意味着它是完美的,但我认为这已经很好了,为什么我要创建其他的索引来稍微好一点呢?