Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте. Помогите советом пожалуйста
Есть таблицы
Неактивен
Создайте индекс KEY(parent,type) и разделите на два запроса, чтобы исключить OR.
Неактивен
rgbeast написал:
разделите на два запроса, чтобы исключить OR.
Подробнее, пожалуйста. Индексы не работают если используется OR?
Неактивен
Могут и не работать, тут explain запроса смотреть надо. А в чем проблема разделить на два запроса?
Неактивен
deadka написал:
Могут и не работать, тут explain запроса смотреть надо.
Можете сообщить в каких случаях могут не работать индексы если используется OR?
deadka написал:
А в чем проблема разделить на два запроса?
Любые действия должны быть обоснованы, логичны, а не потому, что это захотелось моей задней ноге.
Неактивен
rgbeast написал:
Создайте индекс KEY(parent,type) и разделите на два запроса, чтобы исключить OR.
Спасибо,думаю ваше простое решение поможет.
EXPLAIN SELECT url
FROM `objects_files`
WHERE `type` = 'image'
AND (
`id` = 'm'
OR `parent` = 'm'
)
показывает type ALL , key NULL
Если же убрать id или parent , то EXPLAIN показывает,что выбирается либо primary индекс по id,либо индекс по parent.
Надо внимательнее читать доки...
Неактивен
Добавьте индекс и приведите результат EXPLAIN - это поможет обосновать удаление OR.
Индекс - аналог словаря, отсортированного определенным образом. У Вас OR по разным полям, то есть логически сначала нужно посмотреть в одном словаре, а затем в другом. Два запроса это выполнят оптимальным образом. Обычно MySQL использует только один индекс (использование нескольких индексов реализовано только в нескольких частных алгоритмах), поэтому он может просто махнуть рукой и начать перебирать все записи.
P.S. после написания увидел, что вы привели EXPLAIN и все именно так
Неактивен