Я всегда использовал 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
спасибо Кевину
Не перестраивайте таблицу Сводки с нуля каждый раз. Вместо этого увеличивайте его каждый день (или неделю или час или что-то еще). Часто это лучше всего делать с INSERT.. ON DUPLICATE KEY UPDATE.. SELECT...
Убедитесь, что у вас есть столбец, чтобы вы могли "запомнить, где вы остановились".
У этого есть побочные эффекты, которые не доставляют полные 47K строк каждый раз, и не отбрасывая таблицу, оставляя вас без каких-либо данных ненадолго.
Дополнительная дискуссия: http://mysql.rjweb.org/doc.php/summarytables
GROUP BY
. Многие вещи могут замедлить запросы MySQL. Вы не предоставили нам достаточно информации, чтобы помочь нам улучшить детализацию вашего запроса. Пожалуйста, прочитайте эту заметку о том, как задавать хорошие вопросы по SQL , и обратите внимание на раздел о производительности запросов. Тогда, пожалуйста, отредактируйте свой вопрос.INSERT INTO .... SELECT ....
сначала отлаживайте частьSELECT
. В MySQL вы можете выполнитьEXPLAIN SELECT
и планировщик запросов расскажет вам о его логике.