SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 18.01.2019 00:56:54

biryukovm
Участник
Зарегистрирован: 27.04.2017
Сообщений: 19

Есть зпрос который очень долго выполняется и не могу понять почему

Привет всем может кто подскажит как можно сократить время запроса, у меня на него уходит около минуты.
Хотя при всем не так много записей в БД
tovar_product_1c (5065 записей)
tovar_product_price_1c (3299 записей)
tovar_product_price (5517 записей)
tovar_product (4695 записей)


Файл с БД : https://cloud.mail.ru/public/KjC1/B9aGCchat

Ну и сам запрос:

SELECT
x1.tip_db,x1.id_1c,x1.fl_obrabotka_1c,x1.key_product,x1.name,
x2.price,x2.count,
x4.tovar_name,x4.tovar_link

FROM tovar_product_1c AS x1
LEFT JOIN tovar_product_price_1c AS x2 ON x2.key_product=x1.key_product AND x2.tip_db=x1.tip_db
LEFT JOIN tovar_product_price as x3 ON x3.price_shtrih_kod=x1.key_product AND x1.tip_db=x1.tip_db
LEFT JOIN tovar_product as x4 ON x4.tovar_id=x3.id_product
WHERE x1.tip_db is NOT null
GROUP BY x1.tip_db,x1.key_product

Неактивен

 

#2 18.01.2019 09:44:24

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Есть зпрос который очень долго выполняется и не могу понять почему

Приведите результат EXPLAIN для данного запроса

Неактивен

 

#3 18.01.2019 11:59:57

biryukovm
Участник
Зарегистрирован: 27.04.2017
Сообщений: 19

Re: Есть зпрос который очень долго выполняется и не могу понять почему

http://joxi.ru/EA4z0JkuoppJGm.png

Неактивен

 

#4 18.01.2019 12:07:14

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Есть зпрос который очень долго выполняется и не могу понять почему

Попробовать убрать условие NOT NULL (если логика позволяет) и добавить индекс для tovar_product_1c KEY(tip_db,key_product). Кажется, что группировка в запросе сделана по ошибке и имелась в виду сортировка (никаких агрегатных функций к выбираемым полям не применяется).

Неактивен

 

#5 18.01.2019 12:53:58

biryukovm
Участник
Зарегистрирован: 27.04.2017
Сообщений: 19

Re: Есть зпрос который очень долго выполняется и не могу понять почему

rgbeast написал:

Попробовать убрать условие NOT NULL (если логика позволяет) и добавить индекс для tovar_product_1c KEY(tip_db,key_product). Кажется, что группировка в запросе сделана по ошибке и имелась в виду сортировка (никаких агрегатных функций к выбираемым полям не применяется).

У таблицы tovar_product_1c уже есть ключи
http://joxi.ru/1A5xEqzsDbzDy2.png


Попробовать убрать условие NOT NULL

Отбор по NULL я сделал чтоб лишние записи не отображались

Неактивен

 

#6 20.01.2019 16:28:11

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Есть зпрос который очень долго выполняется и не могу понять почему

1) условие AND x1.tip_db=x1.tip_db смысла не имеет

2) `tip_db` в таблицах tovar_product_1c и tovar_product_price_1c имеет 1 уникальное значение и нет не заполненных строк
если так будет всегда, то поля можно определить как not null и убрать условие AND x2.tip_db=x1.tip_db

3) делать отдельные индексы на столбцы с единственным значением бессмысленно, например,
KEY `tip_db` (`tip_db`),
  KEY `fl_obrabotka_1c` (`fl_obrabotka_1c`),

4) почему именно left join, а не join

5) опишите, что вы хотите получить этим запросом, есть предположение, что его можно упростить

Неактивен

 

Board footer

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