小编Ric*_*ckJ的帖子

当 where 子句使用 OR 在连接中跨多个表进行过滤时,会发生表扫描而不是索引查找

我们有一个应用程序生成的查询,该查询使用一个视图,该视图具有两个通过 LEFT OUTER 连接连接的表。当仅从一个表(任一表)中按字段过滤时,会发生索引查找并且速度相当快。当 where 子句使用 OR 包含两个表中字段的条件时,查询计划将切换到表扫描并且不使用任何索引。

被过滤的所有四个字段都在它们各自的表上建立索引。

快速查询计划,我从一张表中筛选 3 个字段:https : //www.brentozar.com/pastetheplan/?id=Hym_4PRSO

慢查询计划,我过滤四个字段......三个来自一个表,一个来自另一个表:https : //www.brentozar.com/pastetheplan/?id=r1dVNDRHO

理想情况下,我想了解为什么会发生这种情况以及如何推动查询引擎利用所有索引。

我考虑过联合,但不幸的是,这个遗留系统正在使用ntext无法联合的值。还要注意两个表之间的连接是一对一的,所以我真的希望优化器利用索引,但也许它不知道?

join sql-server index-tuning sql-server-2016

2
推荐指数
1
解决办法
108
查看次数

标签 统计

index-tuning ×1

join ×1

sql-server ×1

sql-server-2016 ×1