MySQL — оптимизация времени выполнения запросов

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

Я попытался добавить индексы и представления в запрос, но они не улучшают производительность. Может ли кто-нибудь дать предложения? Спасибо.


Связь:

conn = mysql.connect(host = 'relational.fit.cvut.cz', port = int(3306), user = 'guest', passwd = 'relational', db = 'tpch')

Запрос:

WITH customer_lifetime_value AS (
  SELECT
    c_custkey,
    c_name,
    c_address,
    c_nationkey,
    c_phone,
    c_acctbal,
    c_mktsegment,
    c_comment,
    SUM(o_totalprice) AS ltv
  FROM customer
  JOIN orders
    ON o_custkey = c_custkey
  GROUP BY 1, 2, 3, 4, 5, 6, 7, 8
)

SELECT
  r_name,
  MAX(ltv) AS best_customer_value
FROM region
JOIN nation
  ON n_regionkey = r_regionkey
JOIN customer_lifetime_value clv
  ON clv.c_nationkey = n_nationkey
GROUP BY 1;
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
0
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не могли бы вы попробовать это? Он должен считывать меньше данных и давать тот же результат:

WITH customer_lifetime_value AS 
(
    SELECT o_custkey
          ,SUM(o_totalprice) AS ltv
    FROM orders 
    GROUP BY o_custkey
)
SELECT
  r_name,
  MAX(ltv) AS best_customer_value
FROM customer_lifetime_value
JOIN customer
    ON o_custkey = c_custkey
JOIN nation
    ON c_nationkey = n_nationkey
JOIN region
    ON n_regionkey = r_regionkey
GROUP BY r_name

Если это правильно, вы можете создать простые индексы:

  • в таблице заказов, включая только o_custkey и o_totalprice
  • в таблице клиентов, включая только c_custkey и c_nationkey

Кажется, лучше сделать GROUP BY r_name перед JOINing остальными 3 столами??

Rick James 16.02.2023 19:32

Другие вопросы по теме