Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Смотрю explain запроса вычисляющего кол-во записей - select count(*) from много_джойнов WHERE много_условий
Играюсь с перестановкой LEFT JOIN'ов смотрю в EXPLAIN на extra и вот что заинтересовало: в одном варинте rows=1000 (все записи таблицы) и при этом extra=using index, в другом случае можно добится rows=40 но с пустым полем extra
С одной стороны using index говорит о том что для извлечения используются только данные индекса и никакого чтения самих данных не производится, но при этом все же rows=1000 ... во втором случае rows=40 что никак не 1000, но происходит реальное чтение данных из таблицы
как вы считаете какой вариант лучше и почему?
Неактивен
Лучше вариант без LEFT, потому что он действительно упрощает логику во
многих местах. А раз Вы переставляете местами объединения — LEFT Вам
не нужен.
А что касается количества строк — всё зависит от данных. Прочитать 1000
строк из индекса в памяти быстрее, чем прочитать 40 строк по 10 гигабайт
блобов. В то же время, прочитать 40 интов из файлового кэша — быстрее.
Неактивен
paulus, спасибо за ответ
я немного ошибся когда писал ... я игрался с перестановкой не джойнов, а FORCE INDEX в джойнах
Неактивен
Обычно оптимизатор выбирает правильный план выполнения запроса. Я сталкивался
со случаями, когда FORCE INDEX действительно увеличивал производительность запроса,
но обычно (в 99.9% случаев) Вы сделаете запрос менее быстрым.
Неактивен
Страниц: 1