MySQL индексы и порядок

Я получил эту ошибку по другой причине. Я ошибался, добавляя библиотеку поддержки v4 и v13. Это не было необходимо для меня, так как моя minSdkVersion равна 15.

Я исправил ее только только , включая библиотеку поддержки v13. Кроме того, обязательно отметьте библиотеку в пути экспорта экспортированной библиотеки в eclipse. Я также переместил его вверх.

30
задан Machavity 22 August 2017 в 14:29
поделиться

2 ответа

Порядок индекса имеет значение, если условия запроса применяются только к ЧАСТЬ индекса. Рассмотрим:

  1. SELECT * FROM table WHERE first_name = "john" AND last_name = "doe"

  2. SELECT * FROM table WHERE first_name = "john"

  3. SELECT * FROM table WHERE last_name = "doe"

Если ваш индекс ( first_name , last_name ), запросы 1 и 2 будут использовать его, запрос № 3 - нет. Если ваш индекс ( last_name , first_name ), запросы 1 и 3 будут использовать его, запрос № 2 - нет. Изменение порядка условий в предложении WHERE не имеет никакого эффекта ни в том, ни в другом случае.

Подробности здесь

Обновление :
В случае, если указанное выше неясно - MySQL может использовать индекс только в том случае, если столбцы в условиях запроса образуют крайний левый префикс индекса. В запросе № 2 выше нельзя использовать индекс ( last_name , first_name ), потому что он основан только на first_name и first_name НЕ является крайним левым префиксом индекса ( last_name , first_name ) индекса.

Порядок условий ВНУТРИ запроса не имеет значения; запрос № 1 выше сможет использовать индекс ( last_name , first_name ), потому что его условия: first_name и last_name и, вместе они ОБЯЗАТЕЛЬНО образуют крайний левый префикс индекса ( last_name , first_name ) индекса.

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

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

Я также хочу добавить, что вы должны научиться использовать ] EXPLAIN в MySQL, чтобы вы могли сами увидеть, какие индексы выберет оптимизатор для данного запроса.

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

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