#sql #indexing #key #lookup
Вопрос:
Допустим, у вас есть запрос, который дважды СОЕДИНЯЕТ одну и ту же таблицу, используя разные поля, поэтому используются разные индексы. Когда вы смотрите на план выполнения, возникает проблема с поиском ключа. Как я узнаю, какой индекс мне следует изменить, чтобы избавиться от поиска по ключу?
Комментарии:
1. Можете ли вы добавить графический пример?
2. Пара вопросов: 1) Вы, кажется, уверены, что индексы используются для поиска; это правильно? 2) Что вы подразумеваете под «проблемным поиском ключей»? Это медленно, неэффективно, не работает и т. Д. Пожалуйста, добавьте план выполнения и объясните, почему вы считаете это хлопотным.
3. Глядя на план выполнения, я вижу два поиска по индексам в таблице, которая дважды подключена, оба показывают, что используются разные индексы. Существует также поиск по ключу, который находится в этой же таблице. Поиск по ключу должен выполняться миллионы раз, поэтому изменение одного из индексов для включения в просматриваемый столбец определенно поможет, но какой индекс? Я не хочу добавлять и то, и другое.
4. @ScottEvans Я буду рад помочь, но вопрос слишком абстрактный. Пожалуйста, добавьте оптимизируемый запрос и текущий план выполнения. Я предполагаю, что вы на правильном пути, существенно изменив индексы, чтобы они стали «охватывающими индексами». Если производительность критична, я бы преобразовал оба индекса. Тогда я мог бы попробовать возвращать по одному из них за раз.
5. И… Если вам нужно импортировать индекс, я бы постарался перенести фильтрацию как можно раньше, чтобы свести количество запросов к минимуму. Какую базу данных вы используете? На основе кучи или индекса?