Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 оптимизация запроса  [new]
khurshed
Member

Откуда:
Сообщений: 36
SELECT p.city_id, p2c.category_id, count( * ) AS count
FROM product p
JOIN product_to_category p2c ON p.id = p2c.product_id
WHERE p.publish =1
GROUP BY p.city_id, p2c.category_id


в таблице product_to_category = 4,5млн записей
product 1.5млн записей

Этот запрос выполняется в среднем 20 секунд
индексы установлены
13 фев 17, 09:14    [20206059]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
Добрый Э - Эх
Guest
khurshed,

Какие именно индексы установлены? Планы выполнения запроса где? По условию p.publish =1 какой объем данных от общего числа строк в таблице выбирается?
13 фев 17, 09:28    [20206077]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
khurshed
Member

Откуда:
Сообщений: 36
План запроса http://joxi.ru/DmBxxzMhw6YZvA

p.publish = 1 512,542 записей выводит
13 фев 17, 09:40    [20206104]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
khurshed
Member

Откуда:
Сообщений: 36
индексы в таблице product
id(Primary Key)
publish (INDEX)

product_to_category

http://joxi.ru/eAODDRnuxGlj0r
13 фев 17, 09:42    [20206108]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Хранимое представление не предлагать?
13 фев 17, 09:56    [20206148]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
khurshed
План запроса http://joxi.ru/DmBxxzMhw6YZvA

p.publish = 1 512,542 записей выводит

а где план?
13 фев 17, 10:08    [20206214]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
Добрый Э - Эх
Guest
TaPaK
а где план?
план - по ссылке...
Картинка с другого сайта.
13 фев 17, 10:28    [20206327]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
Добрый Э - Эх
Guest
Есть подозрение, что у автора MySQL...
13 фев 17, 10:30    [20206337]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
khurshed
Member

Откуда:
Сообщений: 36
Добрый Э - Эх, да MySQL, извините, что не написал в начале.

Просто прошлый раз сказали лучше такие вопросы задавать в этом разделе
13 фев 17, 10:58    [20206499]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
Добрый Э - Эх
Guest
khurshed,

ну, твой план говорит, что построение запроса начинается с обхода таблицы p по индексному доступу (индекс по полю publish, значение в поле сравнивается с переданной из вне константой - это твой предикат доступа p.publish =1). Далее, для каждой найденной строки из таблицы p делается нестед-лупс в таблицу p2c, соединение происходит по предикату p.id = p2c.product_id, доступ к таблице p2c по индексу поля product_id

Есть подозрение, что в данном случае нестед-лупс не самый лучший способ при таком проценте выбираемых данных. Возможно, что-то типа мерж | хэш джойны было бы предпочтительней, но х.з. - умеет MySQL делать такое или нет
13 фев 17, 11:28    [20206659]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить