Вопрос об использовании или в запросе MySQL - PullRequest
0 голосов
/ 08 июня 2011

Я хотел бы получить некоторые разъяснения, если при использовании ИЛИ в выражении sql для индексов используется индекс или нет?

Например, если у меня есть этот запрос:

SELECT * FROM account_orders WHERE accountid = 1 OR accountid = 0

У меня есть индекс в поле accountid

Будет ли MySQL использовать индекс? Или было бы лучше использовать союз? Я продолжаю читать, что mysql не использует индекс с оператором или, или, возможно, я читаю это неправильно. Любая помощь / объяснение было бы полезно. Использование mysql 5.x

Ответы [ 3 ]

1 голос
/ 08 июня 2011

База данных не будет использовать индекс, если вы используете OR, как у вас.

Обходной путь - перефразировать его, используя IN. следующим образом:

SELECT * FROM account_orders WHERE accountid IN (1, 0)

Базы данных будет использовать индекс (если доступен) с этим синтаксисом

0 голосов
/ 08 июня 2011

Это несколько не по теме, но вы можете просто сделать:

SELECT * FROM account_orders WHERE accountid IN (0,1)
0 голосов
/ 08 июня 2011

Лучше всего префикс вашего выбора оператора с EXPLAIN. Это сообщит о результате запроса и, если какие-либо индексы были использованы.

EXPLAIN SELECT * FROM account_orders WHERE accountid = 1 OR accountid = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...