помогите оптимизировать SQL запрос, mysql |
Здравствуйте Гость [ Вход | Регистрация ] | Форум в сети 7052-й день
![]() |
Шановні користувачі! Запрошуємо вас до офіційного телеграм-канала 0day Community. Тут ви зможете поспілкуватися одне з одним та дізнатися про останні новини щодо роботи ресурса, поставити запитання до адміністрації, тощо. Перейти до телеграм-канала можна відсканувавши QR-код або натиснувши на посилання: @zeroday_ua |
помогите оптимизировать SQL запрос, mysql |
Navern |
Пост
#1
|
Репутация: ![]() ![]() Aut vincere , aut mori ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 2 861 С нами с: 10-October 06 ![]() |
Добрый день. Нужно оптимизировать данный SQL запрос.
SELECT `transaction`.* FROM `transaction` LEFT JOIN `transaction_2` ON `transaction`.`id` = `transaction_2`.`transaction_id` WHERE transaction.deleted IS NULL AND (SELECT SUM(summ) FROM transaction_2 WHERE transaction_id = transaction.id) IS NULL OR transaction.summ - (SELECT SUM(summ) FROM transaction_2 WHERE transaction_id = transaction.id) <> 0 Удалось немного улучшить показатели, но не сильно. SELECT transaction.id, transaction.summ, SUM(transaction_2.summ) FROM transaction LEFT JOIN transaction_2 ON transaction.id = transaction_2.transaction_id WHERE transaction.deleted IS NULL GROUP BY transaction.id HAVING SUM(transaction_2.summ) IS NULL OR SUM(transaction_2.summ) <> transaction.summ Кто-то может помочь? ![]() |
![]() ![]() |
revolver |
Пост
#2
|
Репутация: ![]() ![]() ultra active user ![]() ![]() ![]() ![]() ![]() ![]() Группа: BANNED Сообщений: 33 534 С нами с: 2-June 08 ![]() |
тут особо нечего оптимизировать
убедись, что колонки id в обеих таблицах это pk (primary key), желательно кластерный если нет и нельзя кластерный - построй некластерный (уникальный, если данные позволяют) по id с инклюдом summ, а на первой таблице - +deleted запрос можно написать и так, но это те же яйца, только в профиль WITH A AS (SELECT id, summ FROM transaction WHERE deleted IS NULL), B AS (SELECT id, SUM(summ) summ FROM transaction_2 GROUP BY id) SELECT A.id, A.summ, B.summ FROM A LEFT JOIN B ON A.id=B.id AND (B.summ IS NOT NULL OR A.summ<>B.summ); или так: WITH A AS (SELECT id, summ FROM transaction WHERE deleted IS NULL), B AS (SELECT id, SUM(summ) summ FROM transaction_2 WHERE SUM(summ) IS NOT NULL GROUP BY id) SELECT A.id, A.summ, B.summ FROM A LEFT JOIN B ON A.id=B.id AND A.summ<>B.summ; Сообщение отредактировал revolver - Jun 25 2018, 19:14 |
Navern |
Пост
#3
|
Репутация: ![]() ![]() Aut vincere , aut mori ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 2 861 С нами с: 10-October 06 ![]() |
|
revolver |
Пост
#4
|
Репутация: ![]() ![]() ultra active user ![]() ![]() ![]() ![]() ![]() ![]() Группа: BANNED Сообщений: 33 534 С нами с: 2-June 08 ![]() |
|
Navern |
Пост
#5
|
Репутация: ![]() ![]() Aut vincere , aut mori ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 2 861 С нами с: 10-October 06 ![]() |
у меня MYSQL 5.6
есть еще варианты? |
revolver |
Пост
#6
|
Репутация: ![]() ![]() ultra active user ![]() ![]() ![]() ![]() ![]() ![]() Группа: BANNED Сообщений: 33 534 С нами с: 2-June 08 ![]() |
у меня MYSQL 5.6 https://mariadb.com/kb/en/library/with/есть еще варианты? |
Navern |
Пост
#7
|
Репутация: ![]() ![]() Aut vincere , aut mori ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 2 861 С нами с: 10-October 06 ![]() |
у меня именно MySQL, а не MariaDB. можно как-то ваш запрос переделать без использования WITH |
Pradromalo |
Пост
#8
|
Репутация: ![]() ![]() Активист ![]() Группа: Пользователи Сообщений: 366 С нами с: 2-April 09 ![]() |
--
Сообщение отредактировал Pradromalo - Nov 9 2018, 1:08 |
tano-yastreb |
Пост
#9
|
Репутация: ![]() ![]() Старожил ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 2 523 С нами с: 9-February 14 ![]() |
у меня именно MySQL, а не MariaDB. можно как-то ваш запрос переделать без использования WITH МарияДБ этот тот же мускуль только облегченный и оптимизированный. По моим личным наблюдениям работает где-то на 20% быстрее обычного мускуля. Тестил на портале с посещалкой 1200 хостов и парой специализированых скриптов. |
![]() ![]() |
![]() |
Упрощённая версия | Сейчас: 6th July 2025 - 13:32 |
Сайт не розміщує електронні версії творів, а займається лише колекціонуванням та каталогізацією посилань, що публікуються нашими користувачами. Якщо Ви є правовласником якоїсь частини опублікованого матеріалу та не бажаєте, щоб посилання на нього знаходилось в нашому каталозі, зв’яжіться з нами і ми видалимо його. Файли для обміну надані користувачами сайту і адміністрація не несе відповідальності за їх вміст. |