Настраивая запрос в SQLServer наткнулся на связку Index Seek (Non-clustered) + Key Lookup для одной таблицы. Открыл Output List и добавил все поля из него в Included в индексе. Но Key Lookup не исчез, просто Output list стал пустым.
Стал разбираться: в одном из условий есть ссылка на поле, не учавствующее в индексе. Поскольку поле не возвращается, в Output List оно не попадает. После добавления поля в индекс, Key Lookup изсчез, всё отлично, но — можно ли как-то найти такое поле не просмотривая запрос, только из данных Execution Plan?
Схожая ситуация в другом запросе, вида "WHERE a.id in (select b.key from table_b b ...)" — поле b.key тоже не отображается в свойствах Execution Plan, и также требуется для избавления от Key Lookup.
Здравствуйте, Somescout, Вы писали:
S>Настраивая запрос в SQLServer наткнулся на связку Index Seek (Non-clustered) + Key Lookup для одной таблицы. Открыл Output List и добавил все поля из него в Included в индексе.
Ну, твои потуги зафигачить все поля в Included индекса достаточно смешны.
На все запросы не на-include-ишь, чуть запрос поменяется -- покрытие индексом потеряется.
IndexMaintanance растёт в цене, IO больше, и вообще.
Ты должен знать ОЧЕНЬ ХОРОШО, что ты делаешь, и для чего.
Здравствуйте, MasterZiv, Вы писали:
MZ>Ну, твои потуги зафигачить все поля в Included индекса достаточно смешны.
Производительность выросла в 5 раз. Давайте поржём вместе.
MZ>На все запросы не на-include-ишь, чуть запрос поменяется -- покрытие индексом потеряется. MZ>IndexMaintanance растёт в цене, IO больше, и вообще.
Запрос очень частый, удаление Key Lookup резко уменьшило количество Logical Reads.
MZ>Ты должен знать ОЧЕНЬ ХОРОШО, что ты делаешь, и для чего.