powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / подскажите как ускорить запрос
25 сообщений из 45, страница 1 из 2
подскажите как ускорить запрос
    #38669125
pavlickm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
product 50,606 записей
product_to_category 151,818 записей


Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT p.product_id
FROM product p
LEFT JOIN product_to_category p2c ON ( p2c.product_id = p.product_id )
WHERE p2c.category_id =59
ORDER BY p.sort_order
LIMIT 30 
30 total, Query took 0.1799 sec



explain
Код: plaintext
1.
2.
3.
4.
5.
+----+-------------+-------+--------+--------------------------------+-------------+---------+----------------------------+-------+----------------------------------------------+
| id | select_type | table | type   | possible_keys                  | key         | key_len | ref                        | rows  | Extra                                        |
+----+-------------+-------+--------+--------------------------------+-------------+---------+----------------------------+-------+----------------------------------------------+
|  1 | SIMPLE      | p2c   | ref    | PRIMARY,category_id,product_id | category_id | 4       | const                      | 19768 | Using where; Using temporary; Using filesort |
|  1 | SIMPLE      | p     | eq_ref | product_id                     | product_id  | 4       | testfashion.p2c.product_id |     1 |                                              |
+----+-------------+-------+--------+--------------------------------+-------------+---------+----------------------------+-------+----------------------------------------------+
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38669128
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сразу - зачем лефт джоин?
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38669139
pavlickm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex564657498765453,
привычка (

с inner не лучше время
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38669161
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторSELECT p.product_id
FROM product p

ORDER BY p.sort_order
LIMIT 30

индекс на p.sort_order
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38669228
pavlickm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrow,
есть уже.
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38669233
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь за вторжение, вопрос назрел, а тут как раз протестить можно...

Если p2c.category_id = 59 перенести из where в join быстродействие как то изменится? А то часто сталкивался с подобным, и не задумывался, а тут натолкнули на мысль..
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38669240
pavlickm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SharuPoNemnogu,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT p.product_id
FROM product p
LEFT JOIN product_to_category p2c ON ( p2c.product_id = p.product_id
AND p2c.category_id =59 )
ORDER BY p.sort_order
LIMIT 0 , 30

50,606 total, Query took 0.0011 sec


но запрос вернул все id из product
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38669249
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторно запрос вернул все id из product
так потому что left join наверно
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38669256
pavlickm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SharuPoNemnogu,

туплю, извините
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT p.product_id
FROM product p
INNER JOIN product_to_category p2c ON ( p2c.product_id = p.product_id
AND p2c.category_id =59 )
ORDER BY p.sort_order
LIMIT 30 
Query took 0.1860 sec
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38669454
pavlickm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно ли что-то сделать в этом случае? 0.1-0.2 очень много.
на самом деле итоговый запрос гораздо сложнее, я разбил на части что бы понять что делать.
или это время максимум, что можно выжать из таких таблиц?
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38669470
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavlickJOIN product_to_category p2c ON p2c.product_id = p.product_id AND p2c.category_id =59
Индекс на product_to_category(product_id,category_id) ?
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38669545
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007pavlickJOIN product_to_category p2c ON p2c.product_id = p.product_id AND p2c.category_id =59
Индекс на product_to_category(product_id,category_id) ?


ну тогда скорее наоборот category_to_product(category_id,product_id)
так как изначальный запрос начинается с поиска по категории.
Тогда будет первый селект по индексу только, что убыстрит (особено
если индекс поместится в РАМ)

Как вариант реального убыстрения -- денормализовать
слегка и засунуть сорт_ордер в таблицу продукт_категория

Еще вариант -- попробовать логически улучшить общий
запрос (который нам не показали)
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38669618
pavlickm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc,
индекс product_to_category(product_id,category_id) был, добавил category_to_product(category_id,product_id), но скорость не изменилась
денормализовать, засунув сорт_ордер в таблицу продукт_категория я не могу потому как order by может быть не только по sor_order, но ещё по куче полей из product/product_description
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SELECT p.product_id 
FROM product p
   LEFT JOIN product_description pd ON (pd.product_id=p.product_id)
   LEFT JOIN product_to_store p2s ON (p2s.product_id=p.product_id)
   LEFT JOIN product_to_category p2c ON (p2c.product_id=p.product_id)
   WHERE 1
     AND p2c.category_id IN (59)
     AND p.price >=0
     AND pd.language_id = '1'
     AND p.status = '1'
     AND p.date_available <= NOW()
     AND p2s.store_id = 0

ORDER BY p.sort_order ASC, LCASE(name) ASC
LIMIT 30
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38669646
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavlickm,

ОК, елси вам нужен имено такой запрос , то
можно покапаться в следуюших направлениях:

1. любой СКЛ сопровождайте ЕХПЛАИН-ом и скоростью
(желательно среднее трех прогонов)

2. для чистоты експеримента используйте SQL_NO_CACHE

SELECT SQL_NO_CACHE p.product_id
.........

3. попробуйте добится полной работы индекса (category_id,product_id).
Для этого уберите ВСЕ индексы с таблицы и пересоздайте (category_id,product_id)

После этого запрос

select product_id
from product_to_category
where category_id = 59

должен поиметь запись в ЕХПЛАИН "Using index" и не иметь
"using filesort" "using temporary".

4. Уберите все LEFT. в данном случае это без разницы по результату
но серьезный отрицательный ефект на скорость

5. возможно поиграться со связками -- таблицы можно подсоединять по
продукт_ид ис разных таблиц --- но это следуюшуй этап.
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38669693
pavlickm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc,
индекс один оставил
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT SQL_NO_CACHE p.product_id
FROM product p
INNER JOIN product_to_category p2c ON ( p2c.product_id = p.product_id )
WHERE p2c.category_id =59
ORDER BY p.sort_order
LIMIT 30 

(0.14 sec)



Код: sql
1.
2.
3.
4.
5.
6.
EXPLAIN SELECT p.product_id
FROM product p
INNER JOIN product_to_category p2c ON ( p2c.product_id = p.product_id )
WHERE p2c.category_id =59
ORDER BY p.sort_order
LIMIT 30


Код: plaintext
1.
2.
3.
4.
5.
+----+-------------+-------+--------+---------------------+---------------------+---------+----------------------------+-------+----------------------------------------------+
| id | select_type | table | type   | possible_keys       | key                 | key_len | ref                        | rows  | Extra                                        |
+----+-------------+-------+--------+---------------------+---------------------+---------+----------------------------+-------+----------------------------------------------+
|  1 | SIMPLE      | p2c   | ref    | category_to_product | category_to_product | 4       | const                      | 19700 | Using index; Using temporary; Using filesort |
|  1 | SIMPLE      | p     | eq_ref | product_id          | product_id          | 4       | testfashion.p2c.product_id |     1 |                                              |
+----+-------------+-------+--------+---------------------+---------------------+---------+----------------------------+-------+----------------------------------------------+
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38669697
pavlickm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сам запрос без order by sort_order очень быстрый
Код: sql
1.
2.
3.
4.
5.
SELECT p2c.product_id
FROM product_to_category p2c
WHERE p2c.category_id =59
LIMIT 30 
0.0007 sec
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38669746
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowавторSELECT p.product_id
FROM product p

ORDER BY p.sort_order
LIMIT 30

индекс на p.sort_order
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38669953
pavlickm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pavlickmScareCrow,
есть уже.
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38669954
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavlickmjavajdbc,
индекс один оставил
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT SQL_NO_CACHE p.product_id
FROM product p
INNER JOIN product_to_category p2c ON ( p2c.product_id = p.product_id )
WHERE p2c.category_id =59
ORDER BY p.sort_order
LIMIT 30 

(0.14 sec)



Код: sql
1.
2.
3.
4.
5.
6.
EXPLAIN SELECT p.product_id
FROM product p
INNER JOIN product_to_category p2c ON ( p2c.product_id = p.product_id )
WHERE p2c.category_id =59
ORDER BY p.sort_order
LIMIT 30


Код: plaintext
1.
2.
3.
4.
5.
+----+-------------+-------+--------+---------------------+---------------------+---------+----------------------------+-------+----------------------------------------------+
| id | select_type | table | type   | possible_keys       | key                 | key_len | ref                        | rows  | Extra                                        |
+----+-------------+-------+--------+---------------------+---------------------+---------+----------------------------+-------+----------------------------------------------+
|  1 | SIMPLE      | p2c   | ref    | category_to_product | category_to_product | 4       | const                      | 19700 | Using index; Using temporary; Using filesort |
|  1 | SIMPLE      | p     | eq_ref | product_id          | product_id          | 4       | testfashion.p2c.product_id |     1 |                                              |
+----+-------------+-------+--------+---------------------+---------------------+---------+----------------------------+-------+----------------------------------------------+



что-то не работает у вас -- по идее п2ц запрос не должен давать файлсорт/темпорари.
покажите ресультаты:

1)
SHOW CREATE TABLE prodyct_to_category;

2)
скорость и ЕКСПЛЕЙН:
select SQL_NO_CACHE product_id
from product_to_category
where category_id = 59

3)
что бы два раза не вставать
SHOW CREATE TABLE prodyct_to_shop;

4)
скорость и ЕКСПЛЕЙН:
select SQL_NO_CACHE product_id
from product_to_shop
where shop_id = 0

5)
не заморачивайтесь раньше времени с ORDER BY / LIMIT.
На большом запросе все равно это самые последние операции.
Не надо их использовать во время промежуточной оптимизации.
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38669955
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторне заморачивайтесь раньше времени с ORDER BY / LIMIT.
На большом запросе все равно это самые последние операции.
Не надо их использовать во время промежуточной оптимизации.

плохая фраза. очень. как раз Order by и limit в первую определяют как будет выполнятся запрос.
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38669958
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowавторне заморачивайтесь раньше времени с ORDER BY / LIMIT.
На большом запросе все равно это самые последние операции.
Не надо их использовать во время промежуточной оптимизации.

плохая фраза. очень. как раз Order by и limit в первую определяют как будет выполнятся запрос.


согласно 16165541 , в большом запросе
сортировка/лимит идет после всех
жоинтов и всех филтров.
т.е., напромер, поиск (и его оптимизация) записей в product_to_category
по category_id врядли связан с конечной сортировкой.

Или вы что-то другое хотели сказать?
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38670380
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbcScareCrowпропущено...


плохая фраза. очень. как раз Order by и limit в первую определяют как будет выполнятся запрос.


согласно 16165541 , в большом запросе
сортировка/лимит идет после всех
жоинтов и всех филтров.
т.е., напромер, поиск (и его оптимизация) записей в product_to_category
по category_id врядли связан с конечной сортировкой.

Или вы что-то другое хотели сказать?

попробуйте запрос из большой таблицы с limit и без. покажите результаты. покажите план.
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38670688
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowjavajdbcпропущено...



согласно 16165541 , в большом запросе
сортировка/лимит идет после всех
жоинтов и всех филтров.
т.е., напромер, поиск (и его оптимизация) записей в product_to_category
по category_id врядли связан с конечной сортировкой.

Или вы что-то другое хотели сказать?

попробуйте запрос из большой таблицы с limit и без. покажите результаты. покажите план.


в огороде бузина а в Киеве -- сами знаете...

В оригинале было про "промежуточную" оптимизацию.
(В частности первоначальная выборка продукт_ид из п2ц таблицы)

автор5)
не заморачивайтесь раньше времени с ORDER BY / LIMIT.
На большом запросе все равно это самые последние операции.
Не надо их использовать во время промежуточной оптимизации.


То, что вы говорить, 100% верно, но нужно на последуюших
стадиях оптимизации запроса -- в тот момент когда мыскл будет делать
сорт/лимит.
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38670698
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТо, что вы говорить, 100% верно, но нужно на последуюших
стадиях оптимизации запроса -- в тот момент когда мыскл будет делать
сорт/лимит.

эпично. теперь подумайте что такое план запроса, когда он строится? и как на это влияет ORDER BY + LIMIT
...
Рейтинг: 0 / 0
подскажите как ускорить запрос
    #38670718
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow,

эпично-шмепично...

вы хотите поругатся? ок:

вы зануда и невнимательный читатель.
Мне лень вас тыкать в ту маленькую деталь,
которую вы все время пропускаете.

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


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