Я получил эту ошибку по другой причине. Я ошибался, добавляя библиотеку поддержки v4 и v13. Это не было необходимо для меня, так как моя minSdkVersion равна 15.
Я исправил ее только только , включая библиотеку поддержки v13. Кроме того, обязательно отметьте библиотеку в пути экспорта экспортированной библиотеки в eclipse. Я также переместил его вверх.
Порядок индекса имеет значение, если условия запроса применяются только к ЧАСТЬ индекса. Рассмотрим:
SELECT * FROM table WHERE first_name = "john" AND last_name = "doe"
SELECT * FROM table WHERE first_name = "john"
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
) индекса.
ChssPly76 верен в том, что порядок логических выражений не обязательно должен соответствовать порядку столбцов в индексе. Логические операторы коммутативны , и оптимизатор MySQL достаточно умен, чтобы знать, как сопоставить выражение с индексом в большинстве случаев.
Я также хочу добавить, что вы должны научиться использовать ] EXPLAIN
в MySQL, чтобы вы могли сами увидеть, какие индексы выберет оптимизатор для данного запроса.