MySQL EXPLAIN: “Используя индекс” по сравнению с “Используя индексное условие”

number.ToString().PadLeft(2, '0')
31
задан Piskvor cc-by-sa 3.0 6 November 2009 в 13:18
поделиться

2 ответа

Пример объясняет это лучше всего:

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. Это то, что иногда называют « оптимизацией вниз ».

71
ответ дан 27 November 2019 в 21:49
поделиться

Разница в том, что «Использование индекса» не требует поиска из индекса в таблице, в то время как «Использование условия индекса» иногда необходимо. Попробую проиллюстрировать это примером. Предположим, у вас есть эта таблица:

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'

Запрос все еще может использовать индекс для ограничения результатов небольшими наборами строк с определенным именем, но он должен искать в этих строках таблицы, чтобы проверить, совпадает ли местоположение тоже.

6
ответ дан 27 November 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: