Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вопрос в выполнении / 22 сообщений из 22, страница 1 из 1
13.01.2014, 12:02:40
    #38524076
cvandrey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос в выполнении
Доброго времени.

Подскажите почему так:

Код: sql
1.
2.
3.
select o.id from orders o
join order_details od using (id)
where od.client_type = 2


время выполнения 5.7

Код: sql
1.
2.
3.
select o.id,od.client_type from orders o
join order_details od using (id)
where od.client_type = 2



время выполнения 4.5 ??

Почему второй запрос выполняется быстрей?

*кеш тут точно не участвовал
*id первичный ключ в обоих таблицах
*client_type обычное поле tinyint
*количество записей в таблицах - по 677978
...
Рейтинг: 0 / 0
13.01.2014, 12:22:36
    #38524115
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос в выполнении
А что показывает Explain ?
...
Рейтинг: 0 / 0
13.01.2014, 12:26:55
    #38524124
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос в выполнении
cvandrey,

Это случайность.
...
Рейтинг: 0 / 0
13.01.2014, 12:32:12
    #38524137
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос в выполнении
MasterZivЭто случайность.
Не факт.
С учётом текстов может оказаться, что во втором запросе в выходной набор извлекается не o.id, а od.id (они ж равны!). Т.е. первая таблица вообще не задействуется. Это дешевле...
...
Рейтинг: 0 / 0
13.01.2014, 12:34:38
    #38524142
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос в выполнении
Akina, в первом запросе тоже можно извлекать od.id.
Ну и вопрос, конечно, как ТС замерял время - если по разику каждый запрос прогнал, то разговор вообще ни о чём.
...
Рейтинг: 0 / 0
13.01.2014, 12:47:15
    #38524166
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос в выполнении
AkinaMasterZivЭто случайность.
Не факт.
С учётом текстов может оказаться, что во втором запросе в выходной набор извлекается не o.id, а od.id (они ж равны!). Т.е. первая таблица вообще не задействуется. Это дешевле...Первая таблица в обоих запросах не задействуется. А вот индекс по o.id в обоих запросах должен задействоваться, чтобы join сделать.
Так что, подозреваю, дело в кэшировании.
...
Рейтинг: 0 / 0
13.01.2014, 13:04:39
    #38524213
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос в выполнении
tanglirAkina, в первом запросе тоже можно извлекать od.id.
miksoftПервая таблица в обоих запросах не задействуется.Угу, по уму не должна бы. А вот задействуется или нет на самом деле - фиг знает...
...
Рейтинг: 0 / 0
13.01.2014, 13:12:41
    #38524227
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос в выполнении
AkinaMasterZivЭто случайность.
Не факт.
С учётом текстов может оказаться, что во втором запросе в выходной набор извлекается не o.id, а od.id (они ж равны!). Т.е. первая таблица вообще не задействуется. Это дешевле...

Во втором запросе это тоже можно делать, второе добавленное поле тоже из order_details.
...
Рейтинг: 0 / 0
14.01.2014, 11:25:06
    #38525331
cvandrey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос в выполнении
Ещё раз - это не кеш, конечно я на него сразу и подумал,
использовал и SQL_NO_CACHE и Flush и mysql перезапускал, пробовали на других машинах - результат одинаковый.

Вот explain
...
Рейтинг: 0 / 0
14.01.2014, 11:25:32
    #38525333
cvandrey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос в выполнении
...
Рейтинг: 0 / 0
14.01.2014, 11:28:37
    #38525337
cvandrey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос в выполнении
Под Flush, я имел в виду FLUSH STATUS;
...
Рейтинг: 0 / 0
14.01.2014, 11:36:27
    #38525349
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос в выполнении
cvandrey,

откуда взялось выделение черным и что оно означает?
...
Рейтинг: 0 / 0
14.01.2014, 11:40:31
    #38525359
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос в выполнении
cvandreySQL_NO_CACHEcvandreyFLUSH STATUSНи то, ни другое не сбрасывает и не отключает кэша индексов.

Сколько значений возможно в поле od.client_type и сколько записей имеют od.client_type=2 ?
...
Рейтинг: 0 / 0
14.01.2014, 12:09:23
    #38525414
cvandrey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос в выполнении
miksoft,

miksoftСколько значений возможно в поле od.client_type и сколько записей имеют od.client_type=2 ?


client_type 1 или 2

where od.client_type=2 - ни на что не влияет, explain я строил уже без него
...
Рейтинг: 0 / 0
14.01.2014, 12:10:20
    #38525415
cvandrey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос в выполнении
miksoftcvandrey,

откуда взялось выделение черным и что оно означает?

я менял имена полей и таблиц с реальных на абстрактные.
...
Рейтинг: 0 / 0
14.01.2014, 12:29:41
    #38525441
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос в выполнении
cvandrey,

Попробуйте создать индекс od (client_type, id) и сделать ANALYZE TABLE для обеих таблиц.
where od.client_type=2 не убирайте.
Как изменятся планы и время выполнения?
...
Рейтинг: 0 / 0
14.01.2014, 15:12:43
    #38525731
cvandrey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос в выполнении
miksoft,

не пойму зачем ключ по полю, где 2 значения?
...
Рейтинг: 0 / 0
14.01.2014, 15:15:21
    #38525735
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос в выполнении
cvandreymiksoft,

не пойму зачем ключ по полю, где 2 значения?Не по одному полю, а по двум.
...
Рейтинг: 0 / 0
15.01.2014, 09:45:04
    #38526571
cvandrey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос в выполнении
miksoft,

я понимаю что вы предлагаете создать составной ключ, но зачем он, если во втором поле доступно 2 значения?
...
Рейтинг: 0 / 0
15.01.2014, 09:54:27
    #38526580
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос в выполнении
cvandreymiksoft,

я понимаю что вы предлагаете создать составной ключ, но зачем он, если во втором поле доступно 2 значения?Точнее в первом.
Этот индекс стал бы покрывающим индексом. И тогда вместо чтения всей таблицы MySQL-ю достаточно было бы прочитать лишь часть индекса. Что особенно актуально, если движок таблиц MyISAM, т.к. в MyISAM индексы кэшируются, а таблицы почти нет.
...
Рейтинг: 0 / 0
15.01.2014, 10:33:48
    #38526634
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос в выполнении
MasterZivcvandrey,

Это случайность.


Я ещё раз говорю, это случайность.
Автор, померий раз 50 и выведи среднее. И там, и там.
...
Рейтинг: 0 / 0
17.01.2014, 15:06:54
    #38529703
cvandrey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос в выполнении
авторЭтот индекс стал бы покрывающим индексом. И тогда вместо чтения всей таблицы MySQL-ю достаточно было бы прочитать лишь часть индекса. Что особенно актуально, если движок таблиц MyISAM, т.к. в MyISAM индексы кэшируются, а таблицы почти нет.

В том то и дело, что кешированные индексы должны быстрее подхватываться, чем шерстить всю таблицу (второй sql).

Спасибо ребята, закроем тему.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вопрос в выполнении / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]