SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 29.08.2010 20:43:01

savit
Завсегдатай
Зарегистрирован: 10.11.2009
Сообщений: 25

Что лучше rows=1000 + extra:using index или rows=40 + extra:пусто

Смотрю explain запроса вычисляющего кол-во записей - select count(*) from много_джойнов WHERE много_условий

Играюсь с перестановкой LEFT JOIN'ов  смотрю в EXPLAIN на extra и вот что заинтересовало: в одном варинте rows=1000 (все записи таблицы) и при этом extra=using index, в другом случае можно добится rows=40 но с пустым полем extra

С одной стороны using index говорит о том что для извлечения используются только данные индекса и никакого чтения самих данных не производится, но при этом все же rows=1000  ... во втором случае rows=40 что никак не 1000, но происходит реальное чтение данных из таблицы

как вы считаете какой вариант лучше и почему?

Неактивен

 

#2 30.08.2010 18:49:05

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Что лучше rows=1000 + extra:using index или rows=40 + extra:пусто

Лучше вариант без LEFT, потому что он действительно упрощает логику во
многих местах. А раз Вы переставляете местами объединения — LEFT Вам
не нужен.

А что касается количества строк — всё зависит от данных. Прочитать 1000
строк из индекса в памяти быстрее, чем прочитать 40 строк по 10 гигабайт
блобов. В то же время, прочитать 40 интов из файлового кэша — быстрее.

Неактивен

 

#3 30.08.2010 19:55:40

savit
Завсегдатай
Зарегистрирован: 10.11.2009
Сообщений: 25

Re: Что лучше rows=1000 + extra:using index или rows=40 + extra:пусто

paulus, спасибо за ответ

я немного ошибся когда писал ... я игрался с перестановкой не джойнов, а FORCE INDEX в джойнах

Неактивен

 

#4 30.08.2010 21:53:49

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Что лучше rows=1000 + extra:using index или rows=40 + extra:пусто

Обычно оптимизатор выбирает правильный план выполнения запроса. Я сталкивался
со случаями, когда FORCE INDEX действительно увеличивал производительность запроса,
но обычно (в 99.9% случаев) Вы сделаете запрос менее быстрым.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson