Пример объясняет это лучше всего:
SELECT Year, Make --- possibly more fields and/or from extra tables
FROM myUsedCarInventory
WHERE Make = 'Toyota' AND Year > '2006'
Assuming the Available indexes are:
CarId
VIN
Make
Make and Year
Этот запрос будет ОБЪЯСНЯТЬ с помощью «Использование индекса», потому что ему вообще не требуется , чтобы «попасть» в myUsedCarInventory сама таблица, поскольку индекс «Марка и год» «покрывает» ее потребность в отношении элементов предложения WHERE, которые относятся к этой таблице .
Теперь представьте, что мы сохраняем запрос таким же, но для добавления условия к цвету
...
WHERE Make = 'Toyota' AND Year > '2006' AND Color = 'Red'
этот запрос, вероятно, будет ОБЪЯСНЯТЬ с помощью «Использование условия индекса» («вероятно» здесь для случая, когда год Toyota + не будет оценен как достаточно выборочный, и оптимизатор может решить просто просканировать таблицу). Это означало бы, что MySQL ПЕРВЫЙ будет использовать индекс для определения Make + Year, и ему также придется искать соответствующую строку в таблице, только для строк, которые удовлетворяют условиям Make + Year. Это то, что иногда называют « оптимизацией вниз ».
Разница в том, что «Использование индекса» не требует поиска из индекса в таблице, в то время как «Использование условия индекса» иногда необходимо. Попробую проиллюстрировать это примером. Предположим, у вас есть эта таблица:
id, name, location
С индексом на
name, id
Тогда этому запросу ни для чего не нужна таблица, он может получить всю свою информацию «Используя индекс»:
select id, name from table where name = 'Piskvor'
Но этому запросу нужен поиск по таблице для все строки, в которых имя равно 'Piskvor', поскольку он не может получить местоположение из индекса:
select id from table where name = 'Piskvor' and location = 'North Pole'
Запрос все еще может использовать индекс для ограничения результатов небольшими наборами строк с определенным именем, но он должен искать в этих строках таблицы, чтобы проверить, совпадает ли местоположение тоже.