SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 03.05.2018 13:00:51

Phantom
Участник
Зарегистрирован: 03.05.2018
Сообщений: 6

Падение быстродействия на left join

Один и тот же запрос без left join выполняется 1-2 секунды

https://i.stack.imgur.com/lcoCv.png

а с left join около 40 секунд...

https://i.stack.imgur.com/gzM6E.png

select
    a.article_id as id,
    a.pp_article_id as pp_article_id,
    c.science_id as science_id,
    c.section_id as section_id,
    a.article_name as name,
    a.article_file as file,
    v.view_all as views_count
from
    forum_articles a
    inner join t_forum_conferences c on c.id = a.conference_id
    left join system_articles_viewed v on v.article_id = a.article_id // <=
where
    a.type_id = 0


Из left join выбирается всего одно int-овое поле... Как так может быть? inner join при этом ничуть не оказывает такого влияния на производительность.

Отредактированно Phantom (03.05.2018 13:01:27)

Неактивен

 

#2 03.05.2018 13:03:31

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

Re: Падение быстродействия на left join

В таблице system_articles_viewed нет индекса на article_id? Стоит его добавить, а затем посмотреть каким будет новый порядок JOIN.

Неактивен

 

#3 03.05.2018 13:07:39

Phantom
Участник
Зарегистрирован: 03.05.2018
Сообщений: 6

Re: Падение быстродействия на left join

rgbeast написал:

В таблице system_articles_viewed нет индекса на article_id? Стоит его добавить, а затем посмотреть каким будет новый порядок JOIN.

Я сливаю данные из старых баз. Я ничего не могу и не буду в них менять. Производительность критична лишь потому что баз таких с одинаковой структурой 10 штук с кучей данных. К тому же я для удобства сделал из этого запроса вьюху которую к тому же запросах юзают другие вьюхи и если она выполняется 40 секунд то другая вьюха использующая ее уже 10 минут...

Отредактированно Phantom (03.05.2018 13:08:07)

Неактивен

 

#4 03.05.2018 14:24:53

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

Re: Падение быстродействия на left join

Если не делать индекс, то можно попробовать SELECT STRAIGHT_JOIN, а затем поменять порядок INNER JOIN. С некоторой вероятностью другой порядок исполнения будет быстрее.

Неактивен

 

#5 03.05.2018 15:14:56

Phantom
Участник
Зарегистрирован: 03.05.2018
Сообщений: 6

Re: Падение быстродействия на left join

rgbeast написал:

Если не делать индекс, то можно попробовать SELECT STRAIGHT_JOIN, а затем поменять порядок INNER JOIN. С некоторой вероятностью другой порядок исполнения будет быстрее.

Первый раз слышу про такой джойн... Вот так?

straight_join t_forum_conferences c on a.conference_id = c.id


Тоже самое - 40 секунд.

Неактивен

 

#6 03.05.2018 15:30:50

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

Re: Падение быстродействия на left join

Стоит вернуться к обсуждению индекса. Почему его нет? Таблица получена каким-то импоротом?

Создание индекса не приведет к изменению данных.

ALTER TABLE system_articles_viewed ADD KEY(article_id);

Неактивен

 

#7 03.05.2018 15:37:07

Phantom
Участник
Зарегистрирован: 03.05.2018
Сообщений: 6

Re: Падение быстродействия на left join

rgbeast написал:

Стоит вернуться к обсуждению индекса. Почему его нет? Таблица получена каким-то импоротом?

Создание индекса не приведет к изменению данных.

ALTER TABLE system_articles_viewed ADD KEY(article_id);

Кодеры орудовавшие над сайтом до меня каждый год перекопировали базу и проект, переодически меняя ее. Моя задача - нормализовать структуру и слить все данные за 10 лет в одну базу. При этом сайт все еще работает (там как-бы по подсайту на каждый год) на этих базах... Локально я их не копировал, т.к. больно долго и мне все-равно они только readonly нужны. Так что если что-то вдруг сломается от моих изменений (а там такой замысловатый код на php, что лучше не заглядывать) до того как я все перепишу и солью то будет плохо.

Отредактированно rgbeast (03.05.2018 15:43:20)

Неактивен

 

#8 03.05.2018 15:44:13

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

Re: Падение быстродействия на left join

Обычно создание индекса не ломает приложение.

Неактивен

 

#9 03.05.2018 15:51:25

Phantom
Участник
Зарегистрирован: 03.05.2018
Сообщений: 6

Re: Падение быстродействия на left join

замысловатый код

big_smile Зачем? То что там и выше было уже вроде устоявшегося выражения везде используется. big_smile

А вообще я попробовал индекс добавить все-таки. Реально помогло! Теперь отрабатывает за секунду запрос. И вроде бы ничего не сломалось (надеюсь). Спасибо!

Неактивен

 

#10 03.05.2018 15:59:09

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

Re: Падение быстродействия на left join

Phantom, согласен, что это произвол модератора, Вы не нарушали правил. В данном случае Вами были использованы слова разговорной речи, которые несут не смысловую, а эмоциональную окраску. Это не ненормативная лексика, но это заменитель мата, который делает стиль текстов не таким, какой нам нравится на форуме.

Неактивен

 

#11 03.05.2018 16:01:24

Phantom
Участник
Зарегистрирован: 03.05.2018
Сообщений: 6

Re: Падение быстродействия на left join

rgbeast написал:

Это не ненормативная лексика, но это заменитель мата

Но г. никогда не было матом. Это продукт жизнедеятельности! big_smile Впрочем ладно. Просто смысл меняется от таких правок и выглядит на мой взгляд комично.

Неактивен

 

Board footer

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