From 3c281956c7c1b6ad91121595dc4ab9c26378d9d1 Mon Sep 17 00:00:00 2001 From: Nixevol Date: Thu, 25 Jun 2026 15:37:58 +0800 Subject: [PATCH] =?UTF-8?q?=EF=BB=BFrefactor:=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=20SQL=20=E6=80=A7=E8=83=BD=E5=B9=B6=E8=A7=84?= =?UTF-8?q?=E8=8C=83=E5=8C=96=E6=A0=87=E8=AF=86=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ReportScript.sql | 354 +++++++++++++++++++--------------------- docs/project_context.md | 7 + 2 files changed, 178 insertions(+), 183 deletions(-) diff --git a/ReportScript.sql b/ReportScript.sql index f727fa3..3d0c672 100644 --- a/ReportScript.sql +++ b/ReportScript.sql @@ -1,6 +1,7 @@ -# Update: 2026/04/28 17:54:00 +# Update: 2026/06/25 15:33:00 SET GLOBAL wait_timeout = 86400; +SET GLOBAL innodb_buffer_pool_size = 1073741824; DROP TABLE IF EXISTS `4G`; DROP TABLE IF EXISTS `5G`; DROP TABLE IF EXISTS `4G_Date`; @@ -22,8 +23,8 @@ DROP TABLE IF EXISTS `5G_MAX_IDX`; DROP TABLE IF EXISTS `5G日均流量`; DROP TABLE IF EXISTS `5G_结果表`; -UPDATE 4G_UD SET - `上下行总流量_GB` = IFNULL(`上下行总流量_GB`,0), +UPDATE `4G_UD` SET + `上下行总流量_GB` = IFNULL(`上下行总流量_GB`,0), `ERAB流量` = IFNULL(`ERAB流量`,0), `上行流量_GB` = IFNULL(`上行流量_GB`,0), `下行流量_GB` = IFNULL(`下行流量_GB`,0), @@ -33,8 +34,8 @@ UPDATE 4G_UD SET `下行PDSCH利用率` = IFNULL(`下行PDSCH利用率`,0), `PDCCH资源利用率` = IFNULL(`PDCCH资源利用率`,0), `用户面最大激活UE数` = IFNULL(`用户面最大激活UE数`,0); - -UPDATE 5G_UD SET + +UPDATE `5G_UD` SET `5G上下行总流量_GB` = IFNULL(`5G上下行总流量_GB`,0), `5G上行流量_GB` = IFNULL(`5G上行流量_GB`,0), `5G下行流量_GB` = IFNULL(`5G下行流量_GB`,0), @@ -52,8 +53,8 @@ UPDATE 5G_UD SET CREATE TABLE `4G` AS SELECT * FROM `4G_UD`; CREATE TABLE `5G` AS SELECT * FROM `5G_UD`; -UPDATE 4G SET `日期时间` = DATE_FORMAT(DATE_ADD(`日期时间`,INTERVAL 8 HOUR), '%Y-%m-%d %H:%i:%s'); -UPDATE 5G SET `日期时间` = DATE_FORMAT(DATE_ADD(`日期时间`,INTERVAL 8 HOUR), '%Y-%m-%d %H:%i:%s'); +UPDATE `4G` SET `日期时间` = DATE_FORMAT(DATE_ADD(`日期时间`,INTERVAL 8 HOUR), '%Y-%m-%d %H:%i:%s'); +UPDATE `5G` SET `日期时间` = DATE_FORMAT(DATE_ADD(`日期时间`,INTERVAL 8 HOUR), '%Y-%m-%d %H:%i:%s'); ALTER TABLE `4G` ADD COLUMN `日期` date NULL FIRST, @@ -98,18 +99,18 @@ MODIFY COLUMN `小区上行RLC_SDU字节数_MByte` float, MODIFY COLUMN `PDCCH信道动态CCE占用率` float, MODIFY COLUMN `平均单Flow流量_MB` float; -UPDATE 4G SET `日期` = DATE_FORMAT(`日期时间`, '%Y-%m-%d'), CGI = CONCAT("460-00-",eNodeBId,"-", cellLocalId); -UPDATE 5G SET gNBplmn = "460-00" WHERE gNBplmn IS NULL; -UPDATE 5G SET `日期` = DATE_FORMAT(`日期时间`, '%Y-%m-%d'), NCGI = CONCAT(gNBplmn, "-",gNBId,"-", cellLocalId); +UPDATE `4G` SET `日期` = DATE_FORMAT(`日期时间`, '%Y-%m-%d'), `CGI` = CONCAT("460-00-",`eNodeBId`,"-",`cellLocalId`); +UPDATE `5G` SET `gNBplmn` = "460-00" WHERE `gNBplmn` IS NULL; +UPDATE `5G` SET `日期` = DATE_FORMAT(`日期时间`, '%Y-%m-%d'), `NCGI` = CONCAT(`gNBplmn`,"-",`gNBId`,"-",`cellLocalId`); -ALTER TABLE 4G +ALTER TABLE `4G` ADD INDEX(`日期`), ADD INDEX(`日期时间`), ADD INDEX(`CGI`), ADD INDEX `TC`(`日期时间`, `CGI`), ADD INDEX `DC`(`日期`, `CGI`); -ALTER TABLE 5G +ALTER TABLE `5G` ADD INDEX(`日期`), ADD INDEX(`日期时间`), ADD INDEX(`NCGI`), @@ -120,10 +121,10 @@ ADD INDEX `DC`(`日期`, `NCGI`); CREATE TEMPORARY TABLE IF NOT EXISTS `CCE_MAX_IDX`( SELECT `日期`, - CGI, - MAX( `PDCCH资源利用率`) AS `PDCCH资源利用率_忙时` - FROM 4G - GROUP BY `日期`, CGI + `CGI`, + MAX(`PDCCH资源利用率`) AS `PDCCH资源利用率_忙时` + FROM `4G` + GROUP BY `日期`, `CGI` ); ALTER TABLE `CCE_MAX_IDX` @@ -131,20 +132,20 @@ ADD COLUMN `日期时间` datetime, ADD INDEX `DC`(`日期`, `CGI`, `PDCCH资源利用率_忙时`), ADD INDEX `TC`(`日期时间`, `CGI`); -UPDATE `CCE_MAX_IDX` INNER JOIN 4G +UPDATE `CCE_MAX_IDX` INNER JOIN `4G` ON - `CCE_MAX_IDX`.`日期` = 4G.`日期` AND - `CCE_MAX_IDX`.CGI=4G.CGI AND - `CCE_MAX_IDX`.`PDCCH资源利用率_忙时`=4G.`PDCCH资源利用率` + `CCE_MAX_IDX`.`日期` = `4G`.`日期` AND + `CCE_MAX_IDX`.`CGI` = `4G`.`CGI` AND + `CCE_MAX_IDX`.`PDCCH资源利用率_忙时` = `4G`.`PDCCH资源利用率` SET - `CCE_MAX_IDX`.`日期时间`=4G.`日期时间`; + `CCE_MAX_IDX`.`日期时间` = `4G`.`日期时间`; CREATE TEMPORARY TABLE IF NOT EXISTS `CCE_MAX` ( - SELECT 4G.* - FROM `CCE_MAX_IDX` LEFT JOIN 4G - ON `CCE_MAX_IDX`.CGI=4G.CGI AND - `CCE_MAX_IDX`.`日期时间`=4G.`日期时间` + SELECT `4G`.* + FROM `CCE_MAX_IDX` LEFT JOIN `4G` + ON `CCE_MAX_IDX`.`CGI` = `4G`.`CGI` AND + `CCE_MAX_IDX`.`日期时间` = `4G`.`日期时间` ); DROP TABLE IF EXISTS `CCE_MAX_IDX`; @@ -152,10 +153,10 @@ DROP TABLE IF EXISTS `CCE_MAX_IDX`; CREATE TEMPORARY TABLE IF NOT EXISTS `ULPRB_MAX_IDX`( SELECT `日期`, - CGI, - MAX( `上行PUSCH利用率`) AS `上行PUSCH利用率_忙时` - FROM 4G - GROUP BY `日期`, CGI + `CGI`, + MAX(`上行PUSCH利用率`) AS `上行PUSCH利用率_忙时` + FROM `4G` + GROUP BY `日期`, `CGI` ); ALTER TABLE `ULPRB_MAX_IDX` @@ -163,43 +164,46 @@ ADD COLUMN `日期时间` datetime, ADD INDEX `DC`(`日期`, `CGI`, `上行PUSCH利用率_忙时`), ADD INDEX `TC`(`日期时间`, `CGI`); -UPDATE `ULPRB_MAX_IDX` INNER JOIN 4G +UPDATE `ULPRB_MAX_IDX` INNER JOIN `4G` ON - `ULPRB_MAX_IDX`.`日期` = 4G.`日期` AND - `ULPRB_MAX_IDX`.CGI=4G.CGI AND - `ULPRB_MAX_IDX`.`上行PUSCH利用率_忙时`=4G.`上行PUSCH利用率` + `ULPRB_MAX_IDX`.`日期` = `4G`.`日期` AND + `ULPRB_MAX_IDX`.`CGI` = `4G`.`CGI` AND + `ULPRB_MAX_IDX`.`上行PUSCH利用率_忙时` = `4G`.`上行PUSCH利用率` SET - `ULPRB_MAX_IDX`.`日期时间`=4G.`日期时间`; + `ULPRB_MAX_IDX`.`日期时间` = `4G`.`日期时间`; CREATE TABLE IF NOT EXISTS `ULPRB_MAX` ( - SELECT 4G.* - FROM `ULPRB_MAX_IDX` LEFT JOIN 4G - ON `ULPRB_MAX_IDX`.CGI=4G.CGI AND - `ULPRB_MAX_IDX`.`日期时间`=4G.`日期时间` + SELECT `4G`.* + FROM `ULPRB_MAX_IDX` LEFT JOIN `4G` + ON `ULPRB_MAX_IDX`.`CGI` = `4G`.`CGI` AND + `ULPRB_MAX_IDX`.`日期时间` = `4G`.`日期时间` ); DROP TABLE IF EXISTS `ULPRB_MAX_IDX`; -CREATE TEMPORARY TABLE IF NOT EXISTS `DLPRB_MAX_IDX`(SELECT `日期`, CGI, MAX( `下行PDSCH利用率`) AS `下行PDSCH利用率_忙时` FROM 4G GROUP BY `日期`, CGI); +CREATE TEMPORARY TABLE IF NOT EXISTS `DLPRB_MAX_IDX`( + SELECT `日期`, `CGI`, MAX(`下行PDSCH利用率`) AS `下行PDSCH利用率_忙时` + FROM `4G` GROUP BY `日期`, `CGI` +); ALTER TABLE `DLPRB_MAX_IDX` ADD COLUMN `日期时间` datetime, ADD INDEX `DC`(`日期`, `CGI`, `下行PDSCH利用率_忙时`), ADD INDEX `TC`(`日期时间`, `CGI`); -UPDATE `DLPRB_MAX_IDX` INNER JOIN 4G +UPDATE `DLPRB_MAX_IDX` INNER JOIN `4G` ON - `DLPRB_MAX_IDX`.`日期` = 4G.`日期` AND - `DLPRB_MAX_IDX`.CGI=4G.CGI AND - `DLPRB_MAX_IDX`.`下行PDSCH利用率_忙时`=4G.`下行PDSCH利用率` + `DLPRB_MAX_IDX`.`日期` = `4G`.`日期` AND + `DLPRB_MAX_IDX`.`CGI` = `4G`.`CGI` AND + `DLPRB_MAX_IDX`.`下行PDSCH利用率_忙时` = `4G`.`下行PDSCH利用率` SET - `DLPRB_MAX_IDX`.`日期时间`=4G.`日期时间`; + `DLPRB_MAX_IDX`.`日期时间` = `4G`.`日期时间`; CREATE TEMPORARY TABLE IF NOT EXISTS `DLPRB_MAX` ( - SELECT 4G.* - FROM `DLPRB_MAX_IDX` LEFT JOIN 4G - ON `DLPRB_MAX_IDX`.CGI=4G.CGI AND - `DLPRB_MAX_IDX`.`日期时间`=4G.`日期时间` + SELECT `4G`.* + FROM `DLPRB_MAX_IDX` LEFT JOIN `4G` + ON `DLPRB_MAX_IDX`.`CGI` = `4G`.`CGI` AND + `DLPRB_MAX_IDX`.`日期时间` = `4G`.`日期时间` ); DROP TABLE IF EXISTS `DLPRB_MAX_IDX`; @@ -209,81 +213,75 @@ ALTER TABLE `DLPRB_MAX` ADD INDEX `DC`(`日期`, `CGI`); ALTER TABLE `ULPRB_MAX` ADD INDEX `DC`(`日期`, `CGI`); - -CREATE TEMPORARY TABLE IF NOT EXISTS `4G_Date` (SELECT `日期`, CGI FROM 4G GROUP BY `日期`, CGI); -ALTER TABLE `4G_Date` ADD INDEX `DC`(`日期`, CGI); +CREATE TEMPORARY TABLE IF NOT EXISTS `4G_Date` (SELECT `日期`, `CGI` FROM `4G` GROUP BY `日期`, `CGI`); +ALTER TABLE `4G_Date` ADD INDEX `DC`(`日期`, `CGI`); CREATE TEMPORARY TABLE IF NOT EXISTS `4G_MAX_IDX` ( SELECT - 4G_Date.`日期`, - 4G_Date.CGI, - GREATEST(`ULPRB_MAX`.`上行PUSCH利用率`, DLPRB_MAX.`下行PDSCH利用率`,CCE_MAX.`PDCCH资源利用率`) AS `最大值` + `4G_Date`.`日期`, + `4G_Date`.`CGI`, + GREATEST(`ULPRB_MAX`.`上行PUSCH利用率`, `DLPRB_MAX`.`下行PDSCH利用率`, `CCE_MAX`.`PDCCH资源利用率`) AS `最大值` FROM - 4G_Date + `4G_Date` INNER JOIN - DLPRB_MAX + `DLPRB_MAX` ON - 4G_Date.`日期` = DLPRB_MAX.`日期` AND - 4G_Date.CGI = DLPRB_MAX.CGI + `4G_Date`.`日期` = `DLPRB_MAX`.`日期` AND + `4G_Date`.`CGI` = `DLPRB_MAX`.`CGI` INNER JOIN - CCE_MAX + `CCE_MAX` ON - 4G_Date.`日期` = CCE_MAX.`日期` AND - 4G_Date.CGI = CCE_MAX.CGI + `4G_Date`.`日期` = `CCE_MAX`.`日期` AND + `4G_Date`.`CGI` = `CCE_MAX`.`CGI` INNER JOIN - ULPRB_MAX + `ULPRB_MAX` ON - 4G_Date.`日期` = ULPRB_MAX.`日期` AND - 4G_Date.CGI = ULPRB_MAX.CGI + `4G_Date`.`日期` = `ULPRB_MAX`.`日期` AND + `4G_Date`.`CGI` = `ULPRB_MAX`.`CGI` ); DROP TABLE IF EXISTS `4G_Date`; -ALTER TABLE `4G_MAX_IDX` ADD INDEX `DC`(`日期`, CGI), ADD INDEX (`最大值`); +ALTER TABLE `4G_MAX_IDX` ADD INDEX `DC`(`日期`, `CGI`), ADD INDEX (`最大值`); CREATE TABLE IF NOT EXISTS `4G_MAX` ( - SELECT * FROM 4G LIMIT 0 + SELECT * FROM `4G` LIMIT 0 ); - -ALTER TABLE `4G_MAX` ADD INDEX (`日期`), ADD INDEX (`CGI`), ADD INDEX `DC` (`日期`,CGI), ADD INDEX `idx`(`CGI`, `基站名称`, `小区名称`); - -ALTER TABLE DLPRB_MAX ADD COLUMN `insert` INT NOT NULL DEFAULT 0; -ALTER TABLE CCE_MAX ADD COLUMN `insert` INT NOT NULL DEFAULT 0; - - - +ALTER TABLE `4G_MAX` ADD INDEX (`日期`), ADD INDEX (`CGI`), ADD INDEX `DC` (`日期`, `CGI`), ADD INDEX `idx`(`CGI`, `基站名称`, `小区名称`); TRUNCATE `4G_MAX`; INSERT INTO `4G_MAX` - SELECT ULPRB_MAX.* FROM ULPRB_MAX INNER JOIN `4G_MAX_IDX` + SELECT `ULPRB_MAX`.* FROM `ULPRB_MAX` INNER JOIN `4G_MAX_IDX` ON - ULPRB_MAX.`日期` = 4G_MAX_IDX.`日期` AND - ULPRB_MAX.CGI = 4G_MAX_IDX.`CGI` AND - ULPRB_MAX.`上行PUSCH利用率` = 4G_MAX_IDX.`最大值`; + `ULPRB_MAX`.`日期` = `4G_MAX_IDX`.`日期` AND + `ULPRB_MAX`.`CGI` = `4G_MAX_IDX`.`CGI` AND + `ULPRB_MAX`.`上行PUSCH利用率` = `4G_MAX_IDX`.`最大值`; -DELETE FROM DLPRB_MAX WHERE `日期` IS NULL; -UPDATE DLPRB_MAX INNER JOIN 4G_MAX ON DLPRB_MAX.`日期` = 4G_MAX.`日期` AND DLPRB_MAX.CGI = 4G_MAX.CGI SET DLPRB_MAX.`insert` = 1; -ALTER TABLE DLPRB_MAX ADD INDEX (`insert`); -DELETE FROM DLPRB_MAX WHERE `insert` = 1; -ALTER TABLE DLPRB_MAX DROP COLUMN `insert`; +DELETE FROM `DLPRB_MAX` WHERE `日期` IS NULL; INSERT INTO `4G_MAX` - SELECT DLPRB_MAX.* FROM DLPRB_MAX INNER JOIN `4G_MAX_IDX` + SELECT `DLPRB_MAX`.* FROM `DLPRB_MAX` INNER JOIN `4G_MAX_IDX` ON - DLPRB_MAX.`日期` = 4G_MAX_IDX.`日期` AND - DLPRB_MAX.CGI = 4G_MAX_IDX.`CGI` AND - DLPRB_MAX.`下行PDSCH利用率` = 4G_MAX_IDX.`最大值`; + `DLPRB_MAX`.`日期` = `4G_MAX_IDX`.`日期` AND + `DLPRB_MAX`.`CGI` = `4G_MAX_IDX`.`CGI` AND + `DLPRB_MAX`.`下行PDSCH利用率` = `4G_MAX_IDX`.`最大值` + WHERE NOT EXISTS ( + SELECT 1 FROM `4G_MAX` + WHERE `4G_MAX`.`日期` = `DLPRB_MAX`.`日期` + AND `4G_MAX`.`CGI` = `DLPRB_MAX`.`CGI` + ); -DELETE FROM CCE_MAX WHERE `日期` IS NULL; -UPDATE CCE_MAX INNER JOIN 4G_MAX ON CCE_MAX.`日期` = 4G_MAX.`日期` AND CCE_MAX.CGI = 4G_MAX.CGI SET CCE_MAX.`insert` = 1; -ALTER TABLE CCE_MAX ADD INDEX (`insert`); -DELETE FROM CCE_MAX WHERE `insert` = 1; -ALTER TABLE CCE_MAX DROP COLUMN `insert`; +DELETE FROM `CCE_MAX` WHERE `日期` IS NULL; INSERT INTO `4G_MAX` - SELECT CCE_MAX.* FROM CCE_MAX INNER JOIN `4G_MAX_IDX` + SELECT `CCE_MAX`.* FROM `CCE_MAX` INNER JOIN `4G_MAX_IDX` ON - CCE_MAX.`日期` = 4G_MAX_IDX.`日期` AND - CCE_MAX.CGI = 4G_MAX_IDX.`CGI` AND - CCE_MAX.`PDCCH资源利用率` = 4G_MAX_IDX.`最大值`; + `CCE_MAX`.`日期` = `4G_MAX_IDX`.`日期` AND + `CCE_MAX`.`CGI` = `4G_MAX_IDX`.`CGI` AND + `CCE_MAX`.`PDCCH资源利用率` = `4G_MAX_IDX`.`最大值` + WHERE NOT EXISTS ( + SELECT 1 FROM `4G_MAX` + WHERE `4G_MAX`.`日期` = `CCE_MAX`.`日期` + AND `4G_MAX`.`CGI` = `CCE_MAX`.`CGI` + ); DROP TABLE IF EXISTS `CCE_MAX`; @@ -291,18 +289,16 @@ DROP TABLE IF EXISTS `ULPRB_MAX`; DROP TABLE IF EXISTS `DLPRB_MAX`; DROP TABLE IF EXISTS `4G_MAX_IDX`; -CREATE TEMPORARY TABLE IF NOT EXISTS `日流量`(SELECT `日期`,CGI, SUM(`上下行总流量_GB`) AS `日流量` FROM 4G GROUP BY `日期`,CGI); +CREATE TEMPORARY TABLE IF NOT EXISTS `日流量`(SELECT `日期`, `CGI`, SUM(`上下行总流量_GB`) AS `日流量` FROM `4G` GROUP BY `日期`, `CGI`); ALTER TABLE `日流量` ADD INDEX (`CGI`); DROP TABLE IF EXISTS `4G日均流量`; CREATE TEMPORARY TABLE IF NOT EXISTS `4G日均流量` ( - SELECT CGI, AVG(`日流量`) AS `日均流量`, COUNT(`日期`) AS `流量有效天数` FROM `日流量` WHERE `日流量` > 0 GROUP BY CGI + SELECT `CGI`, AVG(`日流量`) AS `日均流量`, COUNT(`日期`) AS `流量有效天数` FROM `日流量` WHERE `日流量` > 0 GROUP BY `CGI` ); - - CREATE TABLE IF NOT EXISTS `4G_结果表` ( - SELECT CGI, `基站名称`, `小区名称`, + SELECT `CGI`, `基站名称`, `小区名称`, ROUND(AVG(`上下行总流量_GB`),6) AS `自忙时流量(GB)`, ROUND(AVG(`ERAB流量`),6) AS `ERAB流量`, ROUND(AVG(`上行流量_GB`),6) AS `上行流量(GB)`, @@ -313,13 +309,13 @@ CREATE TABLE IF NOT EXISTS `4G_结果表` ( ROUND(AVG(`下行PDSCH利用率`),6) AS `下行PDSCH利用率`, ROUND(AVG(`PDCCH资源利用率`),6) AS `PDCCH资源利用率`, ROUND(AVG(`用户面最大激活UE数`),6) AS `用户面最大激活UE数` - FROM 4G_MAX GROUP BY CGI, `基站名称`, `小区名称` + FROM `4G_MAX` GROUP BY `CGI`, `基站名称`, `小区名称` ); DROP TABLE IF EXISTS `4G_MAX`; ALTER TABLE `4G_结果表` ADD COLUMN `日均流量(GB)` DOUBLE AFTER `小区名称`, ADD INDEX (`CGI`); -ALTER TABLE `4G日均流量` ADD INDEX (CGI); +ALTER TABLE `4G日均流量` ADD INDEX (`CGI`); UPDATE `4G_结果表` INNER JOIN `4G日均流量` -ON `4G_结果表`.CGI=`4G日均流量`.CGI +ON `4G_结果表`.`CGI` = `4G日均流量`.`CGI` SET `4G_结果表`.`日均流量(GB)` = ROUND(`4G日均流量`.`日均流量`,6); DROP TABLE IF EXISTS `日流量`; @@ -332,10 +328,10 @@ DROP TABLE IF EXISTS `4G`; CREATE TEMPORARY TABLE IF NOT EXISTS `ULPRB_MAX_IDX`( SELECT `日期`, - NCGI, + `NCGI`, MAX(`上行PRB平均利用率`) AS `上行PRB平均利用率_忙时` - FROM 5G - GROUP BY `日期`, NCGI + FROM `5G` + GROUP BY `日期`, `NCGI` ); ALTER TABLE `ULPRB_MAX_IDX` @@ -343,29 +339,28 @@ ADD COLUMN `日期时间` datetime, ADD INDEX `DC`(`日期`, `NCGI`, `上行PRB平均利用率_忙时`), ADD INDEX `TC`(`日期时间`, `NCGI`); -UPDATE `ULPRB_MAX_IDX` INNER JOIN 5G +UPDATE `ULPRB_MAX_IDX` INNER JOIN `5G` ON - `ULPRB_MAX_IDX`.`日期` = 5G.`日期` AND - `ULPRB_MAX_IDX`.NCGI=5G.NCGI AND - `ULPRB_MAX_IDX`.`上行PRB平均利用率_忙时`=5G.`上行PRB平均利用率` + `ULPRB_MAX_IDX`.`日期` = `5G`.`日期` AND + `ULPRB_MAX_IDX`.`NCGI` = `5G`.`NCGI` AND + `ULPRB_MAX_IDX`.`上行PRB平均利用率_忙时` = `5G`.`上行PRB平均利用率` SET - `ULPRB_MAX_IDX`.`日期时间`=5G.`日期时间`; + `ULPRB_MAX_IDX`.`日期时间` = `5G`.`日期时间`; CREATE TEMPORARY TABLE IF NOT EXISTS `ULPRB_MAX` ( - SELECT 5G.* - FROM `ULPRB_MAX_IDX` LEFT JOIN 5G - ON `ULPRB_MAX_IDX`.NCGI=5G.NCGI AND - `ULPRB_MAX_IDX`.`日期时间`=5G.`日期时间` + SELECT `5G`.* + FROM `ULPRB_MAX_IDX` LEFT JOIN `5G` + ON `ULPRB_MAX_IDX`.`NCGI` = `5G`.`NCGI` AND + `ULPRB_MAX_IDX`.`日期时间` = `5G`.`日期时间` ); -# 下行PRB MAX表 CREATE TEMPORARY TABLE IF NOT EXISTS `DLPRB_MAX_IDX`( SELECT `日期`, - NCGI, - MAX( `下行PRB平均利用率`) AS `下行PRB平均利用率_忙时` - FROM 5G - GROUP BY `日期`, NCGI + `NCGI`, + MAX(`下行PRB平均利用率`) AS `下行PRB平均利用率_忙时` + FROM `5G` + GROUP BY `日期`, `NCGI` ); ALTER TABLE `DLPRB_MAX_IDX` @@ -373,96 +368,92 @@ ADD COLUMN `日期时间` datetime, ADD INDEX `DC`(`日期`, `NCGI`, `下行PRB平均利用率_忙时`), ADD INDEX `TC`(`日期时间`, `NCGI`); -UPDATE `DLPRB_MAX_IDX` INNER JOIN 5G +UPDATE `DLPRB_MAX_IDX` INNER JOIN `5G` ON - `DLPRB_MAX_IDX`.`日期` = 5G.`日期` AND - `DLPRB_MAX_IDX`.NCGI=5G.NCGI AND - `DLPRB_MAX_IDX`.`下行PRB平均利用率_忙时`=5G.`下行PRB平均利用率` + `DLPRB_MAX_IDX`.`日期` = `5G`.`日期` AND + `DLPRB_MAX_IDX`.`NCGI` = `5G`.`NCGI` AND + `DLPRB_MAX_IDX`.`下行PRB平均利用率_忙时` = `5G`.`下行PRB平均利用率` SET - `DLPRB_MAX_IDX`.`日期时间`=5G.`日期时间`; + `DLPRB_MAX_IDX`.`日期时间` = `5G`.`日期时间`; CREATE TEMPORARY TABLE IF NOT EXISTS `DLPRB_MAX` ( - SELECT 5G.* - FROM `DLPRB_MAX_IDX` LEFT JOIN 5G - ON `DLPRB_MAX_IDX`.NCGI=5G.NCGI AND - `DLPRB_MAX_IDX`.`日期时间`=5G.`日期时间` + SELECT `5G`.* + FROM `DLPRB_MAX_IDX` LEFT JOIN `5G` + ON `DLPRB_MAX_IDX`.`NCGI` = `5G`.`NCGI` AND + `DLPRB_MAX_IDX`.`日期时间` = `5G`.`日期时间` ); DROP TABLE IF EXISTS `DLPRB_MAX_IDX`; ALTER TABLE `DLPRB_MAX` ADD INDEX `DC`(`日期`, `NCGI`); ALTER TABLE `ULPRB_MAX` ADD INDEX `DC`(`日期`, `NCGI`); -# 5G 统计MAX数据 - DROP TABLE IF EXISTS `5G_Date`; CREATE TEMPORARY TABLE IF NOT EXISTS `5G_Date` ( - SELECT `日期`, NCGI FROM 5G GROUP BY `日期`, NCGI + SELECT `日期`, `NCGI` FROM `5G` GROUP BY `日期`, `NCGI` ); -ALTER TABLE `5G_Date` ADD INDEX `DC`(`日期`, NCGI); +ALTER TABLE `5G_Date` ADD INDEX `DC`(`日期`, `NCGI`); CREATE TEMPORARY TABLE IF NOT EXISTS `5G_MAX_IDX` ( SELECT - 5G_Date.`日期`, - 5G_Date.NCGI, - GREATEST(ULPRB_MAX.`上行PRB平均利用率`, DLPRB_MAX.`下行PRB平均利用率`) AS `最大值` + `5G_Date`.`日期`, + `5G_Date`.`NCGI`, + GREATEST(`ULPRB_MAX`.`上行PRB平均利用率`, `DLPRB_MAX`.`下行PRB平均利用率`) AS `最大值` FROM - 5G_Date + `5G_Date` INNER JOIN - DLPRB_MAX + `DLPRB_MAX` ON - 5G_Date.`日期` = DLPRB_MAX.`日期` AND - 5G_Date.NCGI = DLPRB_MAX.NCGI + `5G_Date`.`日期` = `DLPRB_MAX`.`日期` AND + `5G_Date`.`NCGI` = `DLPRB_MAX`.`NCGI` INNER JOIN - ULPRB_MAX + `ULPRB_MAX` ON - 5G_Date.`日期` = ULPRB_MAX.`日期` AND - 5G_Date.NCGI = ULPRB_MAX.NCGI + `5G_Date`.`日期` = `ULPRB_MAX`.`日期` AND + `5G_Date`.`NCGI` = `ULPRB_MAX`.`NCGI` ); DROP TABLE IF EXISTS `5G_Date`; -ALTER TABLE `5G_MAX_IDX` ADD INDEX `DC`(`日期`, NCGI), ADD INDEX (`最大值`); - +ALTER TABLE `5G_MAX_IDX` ADD INDEX `DC`(`日期`, `NCGI`), ADD INDEX (`最大值`); CREATE TABLE IF NOT EXISTS `5G_MAX` ( - SELECT * FROM 5G LIMIT 0 + SELECT * FROM `5G` LIMIT 0 ); +ALTER TABLE `5G_MAX` ADD INDEX (`日期`), ADD INDEX (`NCGI`), ADD INDEX `DC` (`日期`, `NCGI`), ADD INDEX `idx`(`NCGI`, `CU小区配置名称`); -ALTER TABLE `5G_MAX` ADD INDEX (`日期`), ADD INDEX (`NCGI`), ADD INDEX `DC` (`日期`,NCGI), ADD INDEX `idx`(`NCGI`, `CU小区配置名称`); - -ALTER TABLE DLPRB_MAX ADD COLUMN `insert` INT NOT NULL DEFAULT 0; TRUNCATE `5G_MAX`; INSERT INTO `5G_MAX` - SELECT ULPRB_MAX.* FROM ULPRB_MAX INNER JOIN `5G_MAX_IDX` + SELECT `ULPRB_MAX`.* FROM `ULPRB_MAX` INNER JOIN `5G_MAX_IDX` ON - ULPRB_MAX.`日期` = 5G_MAX_IDX.`日期` AND - ULPRB_MAX.NCGI = 5G_MAX_IDX.`NCGI` AND - ULPRB_MAX.`上行PRB平均利用率` = 5G_MAX_IDX.`最大值`; + `ULPRB_MAX`.`日期` = `5G_MAX_IDX`.`日期` AND + `ULPRB_MAX`.`NCGI` = `5G_MAX_IDX`.`NCGI` AND + `ULPRB_MAX`.`上行PRB平均利用率` = `5G_MAX_IDX`.`最大值`; -DELETE FROM DLPRB_MAX WHERE `日期` IS NULL; -UPDATE DLPRB_MAX INNER JOIN 5G_MAX ON DLPRB_MAX.`日期` = 5G_MAX.`日期` AND DLPRB_MAX.NCGI = 5G_MAX.NCGI SET DLPRB_MAX.`insert` = 1; -ALTER TABLE DLPRB_MAX ADD INDEX (`insert`); -DELETE FROM DLPRB_MAX WHERE `insert` = 1; -ALTER TABLE DLPRB_MAX DROP COLUMN `insert`; +DELETE FROM `DLPRB_MAX` WHERE `日期` IS NULL; INSERT INTO `5G_MAX` - SELECT DLPRB_MAX.* FROM DLPRB_MAX INNER JOIN `5G_MAX_IDX` + SELECT `DLPRB_MAX`.* FROM `DLPRB_MAX` INNER JOIN `5G_MAX_IDX` ON - DLPRB_MAX.`日期` = 5G_MAX_IDX.`日期` AND - DLPRB_MAX.NCGI = 5G_MAX_IDX.`NCGI` AND - DLPRB_MAX.`下行PRB平均利用率` = 5G_MAX_IDX.`最大值`; + `DLPRB_MAX`.`日期` = `5G_MAX_IDX`.`日期` AND + `DLPRB_MAX`.`NCGI` = `5G_MAX_IDX`.`NCGI` AND + `DLPRB_MAX`.`下行PRB平均利用率` = `5G_MAX_IDX`.`最大值` + WHERE NOT EXISTS ( + SELECT 1 FROM `5G_MAX` + WHERE `5G_MAX`.`日期` = `DLPRB_MAX`.`日期` + AND `5G_MAX`.`NCGI` = `DLPRB_MAX`.`NCGI` + ); DROP TABLE IF EXISTS `ULPRB_MAX`; DROP TABLE IF EXISTS `DLPRB_MAX`; DROP TABLE IF EXISTS `5G_MAX_IDX`; -CREATE TEMPORARY TABLE IF NOT EXISTS `日流量`(SELECT `日期`,NCGI, SUM(`5G上下行总流量_GB`) AS `日流量` FROM 5G GROUP BY `日期`,NCGI); +CREATE TEMPORARY TABLE IF NOT EXISTS `日流量`(SELECT `日期`, `NCGI`, SUM(`5G上下行总流量_GB`) AS `日流量` FROM `5G` GROUP BY `日期`, `NCGI`); ALTER TABLE `日流量` ADD INDEX (`NCGI`); CREATE TEMPORARY TABLE IF NOT EXISTS `5G日均流量` ( - SELECT NCGI, AVG(`日流量`) AS `日均流量`, COUNT(`日期`) AS `流量有效天数` FROM `日流量` WHERE `日流量` > 0 GROUP BY NCGI + SELECT `NCGI`, AVG(`日流量`) AS `日均流量`, COUNT(`日期`) AS `流量有效天数` FROM `日流量` WHERE `日流量` > 0 GROUP BY `NCGI` ); CREATE TABLE IF NOT EXISTS `5G_结果表` ( - SELECT NCGI, `CU小区配置名称`, + SELECT `NCGI`, `CU小区配置名称`, ROUND(AVG(`5G上下行总流量_GB`),6) AS `5G上下行总流量(上行PDCP PDU数据量+下行PDCP成功发送数据量)(GB)`, ROUND(AVG(`5G上行流量_GB`),6) AS `5G上行流量(上行PDCP PDU数据量)(GB)`, ROUND(AVG(`5G下行流量_GB`),6) AS `5G下行流量(下行PDCP成功发送数据量)(GB)`, @@ -476,13 +467,13 @@ CREATE TABLE IF NOT EXISTS `5G_结果表` ( ROUND(AVG(`小区下行RLC_SDU字节数_MByte`),6) AS `小区下行RLC SDU字节数(MByte)`, ROUND(AVG(`小区上行RLC_SDU字节数_MByte`),6) AS `小区上行RLC SDU字节数(MByte)`, ROUND(AVG(`平均单Flow流量_MB`),6) AS `单Flow流量(MB)` - FROM 5G_MAX GROUP BY NCGI, `CU小区配置名称` + FROM `5G_MAX` GROUP BY `NCGI`, `CU小区配置名称` ); ALTER TABLE `5G_结果表` ADD COLUMN `日均流量(GB)` DOUBLE AFTER `CU小区配置名称`, ADD INDEX (`NCGI`); -ALTER TABLE `5G日均流量` ADD INDEX (NCGI); +ALTER TABLE `5G日均流量` ADD INDEX (`NCGI`); UPDATE `5G_结果表` INNER JOIN `5G日均流量` -ON `5G_结果表`.NCGI=`5G日均流量`.NCGI +ON `5G_结果表`.`NCGI` = `5G日均流量`.`NCGI` SET `5G_结果表`.`日均流量(GB)` = ROUND(`5G日均流量`.`日均流量`,6); DROP TABLE IF EXISTS `日流量`; @@ -491,19 +482,17 @@ DROP TABLE IF EXISTS `4G`; DROP TABLE IF EXISTS `5G`; DROP TABLE IF EXISTS `5G_MAX`; -UPDATE `4G_结果表` SET `日均流量(GB)` = IFNULL( `日均流量(GB)`, 0 ), -`自忙时流量(GB)` = IFNULL( `自忙时流量(GB)`, 0 ), -`ERAB流量` = IFNULL( `ERAB流量`, 0 ), -`上行流量(GB)` = IFNULL( `上行流量(GB)`, 0 ), -`下行流量(GB)` = IFNULL( `下行流量(GB)`, 0 ), -`用户面平均激活UE数` = IFNULL( `用户面平均激活UE数`, 0 ), -`YY-RRC连接建立最大用户数` = IFNULL( `YY-RRC连接建立最大用户数`, 0 ), -`上行PUSCH利用率` = IFNULL( `上行PUSCH利用率`, 0 ), -`下行PDSCH利用率` = IFNULL( `下行PDSCH利用率`, 0 ), -`PDCCH资源利用率` = IFNULL( `PDCCH资源利用率`, 0 ), -`用户面最大激活UE数` = IFNULL( `用户面最大激活UE数`, 0 ); - - +UPDATE `4G_结果表` SET `日均流量(GB)` = IFNULL(`日均流量(GB)`, 0), +`自忙时流量(GB)` = IFNULL(`自忙时流量(GB)`, 0), +`ERAB流量` = IFNULL(`ERAB流量`, 0), +`上行流量(GB)` = IFNULL(`上行流量(GB)`, 0), +`下行流量(GB)` = IFNULL(`下行流量(GB)`, 0), +`用户面平均激活UE数` = IFNULL(`用户面平均激活UE数`, 0), +`YY-RRC连接建立最大用户数` = IFNULL(`YY-RRC连接建立最大用户数`, 0), +`上行PUSCH利用率` = IFNULL(`上行PUSCH利用率`, 0), +`下行PDSCH利用率` = IFNULL(`下行PDSCH利用率`, 0), +`PDCCH资源利用率` = IFNULL(`PDCCH资源利用率`, 0), +`用户面最大激活UE数` = IFNULL(`用户面最大激活UE数`, 0); UPDATE `5G_结果表` SET `日均流量(GB)` = IFNULL(`日均流量(GB)`,0), @@ -520,4 +509,3 @@ UPDATE `5G_结果表` SET `小区下行RLC SDU字节数(MByte)` = IFNULL(`小区下行RLC SDU字节数(MByte)`,0), `小区上行RLC SDU字节数(MByte)` = IFNULL(`小区上行RLC SDU字节数(MByte)`,0), `单Flow流量(MB)` = IFNULL(`单Flow流量(MB)`,0); - diff --git a/docs/project_context.md b/docs/project_context.md index 436815c..6d4d53f 100644 --- a/docs/project_context.md +++ b/docs/project_context.md @@ -854,3 +854,10 @@ - 前端阶段标签:`stageLabels` 新增 `cell_data: '更新 CellData...'`;`importing` 标签从"上传数据中..."改为"导入数据中..."以避免与文件上传混淆。 - 前端结果摘要:CellData 独立处理或容量处理完成后,处理进度区域显示成功摘要(文件数、导入行数、跳过行数、耗时);`TaskStatus` 类型新增 `result?: CellDataResult` 字段。 - 验证:`python -m compileall -q app` 通过;`frontend` `npm run build`(vue-tsc)通过;构建产物已清理。 + +## 2026-06-25:ReportScript.sql 性能优化与标识符规范化 + +- Buffer Pool:脚本头部新增 `SET GLOBAL innodb_buffer_pool_size = 1073741824`(1 GB),原值 128 MB 不足以容纳 4G/5G 各 500 万行的工作集,导致 UPDATE...JOIN 等操作变成磁盘随机 I/O。 +- 消除标记-删除模式:4G 部分的 DLPRB_MAX 和 CCE_MAX、5G 部分的 DLPRB_MAX 原先各用 `ADD COLUMN insert → UPDATE...JOIN → ADD INDEX → DELETE → DROP COLUMN` 五步标记并删除重复行,现改为 `INSERT...WHERE NOT EXISTS` 一步完成,共减少约 15 条冗余 DDL/DML。这正是导致 CCE_MAX JOIN 4G_MAX UPDATE 跑 >1 小时的直接原因。 +- 标识符规范化:全文所有表名和列名统一加反引号,避免以数字开头的表名(如 `4G`、`5G`)和中文列名在不同 MySQL 版本或 SQL 模式下引起解析歧义。 +- 业务逻辑未变:忙时取法(ULPRB > DLPRB > CCE 优先级)、结果表聚合和 IFNULL 归零逻辑均保持原样。