MYSQL WORKBENCH 5.7, СОЗДАЙТЕ ТАБЛИЦУ ИЗ QUERY SLOW

0

Я всегда использовал MS Access и ранее создал сводные таблицы (maketable query), используя мою основную таблицу данных, то есть мои основные данные имеют всю информацию о продажах по счету, я затем создаю сводную таблицу продаж по клиенту, что означает, что у меня меньше строк в эту таблицу при просмотре на странице интрасети, которую гораздо быстрее отобразить.

Теперь я решил перейти на MYSQL, и нет команды maketable, но я могу создать таблицу под названием "customersales" на основе запроса select. У меня 1 миллион строк в моей главной таблице, называемой "sales". Делая это таким образом, для завершения этого требуется 257 секунд, что для меня кажется очень медленным. Результат фактически возвращает 47000 записей в новую таблицу

Ниже приводится инструкция create table:

CREATE DEFINER = root @localhost ПРОЦЕДУРА 'CREATE_SALESCUSTOMER'() НАЧАТЬ

SET SQL_SAFE_UPDATES = 0;

удалить из salescustomer;

INSERT
     INTO  SALESCUSTOMER(SumOfNET, SUMOFGROSS, SumOfQTY, SUMOFSQMQUANTITY,
                SUMOFMARGIN, SumOfBUDGETNET,SumOfBUDGETMARGIN,SumOfBUDGETSQM,
                VKORG,VKBURORDER,VKGRPORDER,SALESGROUPORDER,SALESOFFICEORDER,
                CUSTOMER,NAME1,KUNN2,PARTNERNAME,PERDE,GJAHR,SALESDIRECTOR,
                SALESDIRECTORNAME,VKBUR,VKGRP,SALESGROUP,SALESOFFICE,
                STRAS,ORT02,ORT01, COUNTY,PSTLZ,TELF1,konda,kondatext
                        ) 
SELECT  Sum(SALES.NET_SALES) AS SumOfNET,Sum(SALES.NET_SALES) AS SUMOFGROSS,
        Sum(SALES.QTY) AS SumOfQTY,
        Sum(SALES.SUMOFSQMQUANTITY) AS SUMOFSQMQUANTITY,
        Sum(SALES.UKMARGIN) AS SUMOFMARGIN,
        Sum(SALES.BUDGETNET) AS SumOfBUDGETNET,
        Sum(SALES.BUDGETMARGIN) AS SumOfBUDGETMARGIN,
        Sum(SALES.BUDGETSQM) AS SumOfBUDGETSQM,
        SALES.VKORG,SALES.VKBURORDER,
        SALES.VKGRPORDER,SALES.SALESGROUPORDER,
        SALES.SALESOFFICEORDER,SALES.CUSTOMER,SALES.NAME1,SALES.KUNN2,
        SALES.PARTNERNAME,SALES.PERDE,SALES.GJAHR,SALES.SALESDIRECTOR,
        SALES.SALESDIRECTORNAME,SALES.VKBUR,SALES.VKGRP,SALES.SALESGROUP,
        SALES.SALESOFFICE,STRAS,ORT02,ORT01, COUNTY,PSTLZ,TELF1,
        konda,kondatext
    FROM  SALES
    GROUP BY  konda,kondatext,SALES.VKORG,SALES.VKBURORDER,SALES.VKGRPORDER,
        SALES.SALESGROUPORDER,SALES.SALESOFFICEORDER,SALES.CUSTOMER,
        SALES.NAME1,SALES.KUNN2,SALES.PARTNERNAME,SALES.PERDE,
        SALES.GJAHR;

Может ли кто-нибудь помочь, я делаю что-то неправильно, это нормальная скорость. Извините, новичок в MYSQL

спасибо Кевину

  • 1
    200 000 строк в минуту - это медленно, но не слишком, для запроса со многими столбцами в предложении GROUP BY . Многие вещи могут замедлить запросы MySQL. Вы не предоставили нам достаточно информации, чтобы помочь нам улучшить детализацию вашего запроса. Пожалуйста, прочитайте эту заметку о том, как задавать хорошие вопросы по SQL , и обратите внимание на раздел о производительности запросов. Тогда, пожалуйста, отредактируйте свой вопрос.
  • 1
    Pro Совет 1: заставьте ваш оператор SQL работать, прежде чем поместить его в хранимую процедуру. Хранимые процедуры сложнее отладить. Pro Совет 2: Когда вы делаете INSERT INTO .... SELECT .... сначала отлаживайте часть SELECT . В MySQL вы можете выполнить EXPLAIN SELECT и планировщик запросов расскажет вам о его логике.
Показать ещё 1 комментарий
Теги:
aggregate-functions
query-performance

1 ответ

0

Не перестраивайте таблицу Сводки с нуля каждый раз. Вместо этого увеличивайте его каждый день (или неделю или час или что-то еще). Часто это лучше всего делать с INSERT.. ON DUPLICATE KEY UPDATE.. SELECT... Убедитесь, что у вас есть столбец, чтобы вы могли "запомнить, где вы остановились".

У этого есть побочные эффекты, которые не доставляют полные 47K строк каждый раз, и не отбрасывая таблицу, оставляя вас без каких-либо данных ненадолго.

Дополнительная дискуссия: http://mysql.rjweb.org/doc.php/summarytables

Ещё вопросы

Сообщество Overcoder
Наверх
Меню