powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вопрос в выполнении
22 сообщений из 22, страница 1 из 1
Вопрос в выполнении
    #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
Вопрос в выполнении
    #38524115
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что показывает Explain ?
...
Рейтинг: 0 / 0
Вопрос в выполнении
    #38524124
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cvandrey,

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

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

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

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

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

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


client_type 1 или 2

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

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

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

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

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

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

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

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

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


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

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

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


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