数字督察一体化平台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

268 lines
8.6 KiB

-- MySQL 5.7.21:只读诊断脚本,请先选中生产业务库。
-- 下面默认查询全部时间、全部单位,与列表初次打开一致。
-- 请先返回本文件的版本、行数估计、索引、8 份 EXPLAIN 结果;不要先执行建索引脚本。
-- EXPLAIN 不返回业务明细,不代表真实耗时;验证耗时需另行运行实际 SQL。
SELECT VERSION(), DATABASE();
SELECT TABLE_NAME, TABLE_ROWS FROM information_schema.TABLES
WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME IN ('negative','negative_blame','sup_police','sup_depart','sup_depart_police_size');
SHOW INDEX FROM negative;
SHOW INDEX FROM negative_blame;
SHOW INDEX FROM sup_police;
SHOW INDEX FROM sup_depart;
SHOW INDEX FROM sup_depart_police_size;
SET @beginTime = '1949-01-01 00:00:00';
SET @endTime = NOW();
-- 单位问题库:优化前列表查询(第一页 10 条)
EXPLAIN
SELECT
d.id depart_id,
d1.short_name parent_depart_name,
d.short_name depart_name,
p.police_size,
p.aux_size,
count(DISTINCT nb.blameIdCode) verify_police_size,
count(DISTINCT n.id) verify_size
FROM sup_depart d
LEFT JOIN sup_depart d1 ON d.pid = d1.id
LEFT JOIN sup_depart_police_size p ON p.depart_id = d.id
INNER JOIN negative n ON d.id = n.involveDepartId
LEFT JOIN negative_blame nb ON n.id = nb.negativeId
WHERE d.level = 3
AND n.crtTime BETWEEN @beginTime AND @endTime
GROUP BY d.id, d1.short_name, d.short_name, p.police_size, p.aux_size
ORDER BY
verify_size
DESC , d.id ASC
LIMIT 0, 10;
-- 单位问题库:优化前分页总数
EXPLAIN
SELECT count(*) FROM (
SELECT
d.id depart_id,
d1.short_name parent_depart_name,
d.short_name depart_name,
p.police_size,
p.aux_size,
count(DISTINCT nb.blameIdCode) verify_police_size,
count(DISTINCT n.id) verify_size
FROM sup_depart d
LEFT JOIN sup_depart d1 ON d.pid = d1.id
LEFT JOIN sup_depart_police_size p ON p.depart_id = d.id
INNER JOIN negative n ON d.id = n.involveDepartId
LEFT JOIN negative_blame nb ON n.id = nb.negativeId
WHERE d.level = 3
AND n.crtTime BETWEEN @beginTime AND @endTime
GROUP BY d.id, d1.short_name, d.short_name, p.police_size, p.aux_size
) counted;
-- 单位问题库:优化后列表查询(第一页 10 条)
EXPLAIN
SELECT DISTINCT
d.id depart_id,
d1.short_name parent_depart_name,
d.short_name depart_name,
p.police_size,
p.aux_size,
stats.verify_police_size,
stats.verify_size
FROM (
SELECT d.id depart_id,
count(DISTINCT nb.blameIdCode) verify_police_size,
count(DISTINCT n.id) verify_size
FROM sup_depart d
INNER JOIN negative n ON n.involveDepartId = CAST(d.id AS CHAR CHARACTER SET utf8) COLLATE utf8_general_ci
LEFT JOIN negative_blame nb ON nb.negativeId = CONVERT(n.id USING utf8) COLLATE utf8_general_ci
WHERE
d.level = 3
AND n.crtTime BETWEEN @beginTime AND @endTime
GROUP BY d.id
) stats
INNER JOIN sup_depart d ON d.id = stats.depart_id
LEFT JOIN sup_depart d1 ON d.pid = d1.id
LEFT JOIN sup_depart_police_size p ON p.depart_id = CAST(d.id AS CHAR CHARACTER SET utf8) COLLATE utf8_general_ci
ORDER BY
verify_size
DESC , d.id ASC
LIMIT 0, 10;
-- 单位问题库:优化后分页总数
EXPLAIN
SELECT count(*) FROM (
SELECT DISTINCT d.id, p.police_size, p.aux_size
FROM sup_depart d
LEFT JOIN sup_depart_police_size p ON p.depart_id = CAST(d.id AS CHAR CHARACTER SET utf8) COLLATE utf8_general_ci
WHERE
d.level = 3
AND EXISTS (
SELECT 1 FROM negative n
WHERE n.involveDepartId = CAST(d.id AS CHAR CHARACTER SET utf8) COLLATE utf8_general_ci
AND n.crtTime BETWEEN @beginTime AND @endTime
)
) counted;
-- 个人问题库:优化前列表查询(第一页 10 条)
EXPLAIN
SELECT
p.id_code,
p.NAME,
p.emp_no,
p.position,
p.employment_date,
p.person_type,
d.short_name depart_name,
d.id depart_id,
d1.short_name parent_depart_name,
count(DISTINCT n.id) verify_size
FROM
sup_police p
LEFT JOIN sup_depart d ON p.org_id = d.id
LEFT JOIN sup_depart d1 ON d.pid = d1.id and d1.level >= 2
INNER JOIN negative_blame nb ON p.id_code = nb.blameIdCode AND nb.type = 'personal'
INNER JOIN negative n ON nb.negativeId = n.id
WHERE
p.del = 0
AND n.checkStatus IN ('1', '2')
AND n.processing_status = 'completed'
AND n.discoveryTime BETWEEN @beginTime AND @endTime
GROUP BY
p.id_code,
p.NAME,
p.emp_no,
p.employment_date,
p.position,
p.person_type,
d.short_name,
d.id,
d1.short_name
ORDER BY
verify_size
DESC , p.id_code ASC
LIMIT 0, 10;
-- 个人问题库:优化前分页总数
EXPLAIN
SELECT count(*) FROM (
SELECT
p.id_code,
p.NAME,
p.emp_no,
p.position,
p.employment_date,
p.person_type,
d.short_name depart_name,
d.id depart_id,
d1.short_name parent_depart_name,
count(DISTINCT n.id) verify_size
FROM
sup_police p
LEFT JOIN sup_depart d ON p.org_id = d.id
LEFT JOIN sup_depart d1 ON d.pid = d1.id and d1.level >= 2
INNER JOIN negative_blame nb ON p.id_code = nb.blameIdCode AND nb.type = 'personal'
INNER JOIN negative n ON nb.negativeId = n.id
WHERE
p.del = 0
AND n.checkStatus IN ('1', '2')
AND n.processing_status = 'completed'
AND n.discoveryTime BETWEEN @beginTime AND @endTime
GROUP BY
p.id_code,
p.NAME,
p.emp_no,
p.employment_date,
p.position,
p.person_type,
d.short_name,
d.id,
d1.short_name
) counted;
-- 个人问题库:优化后列表查询(第一页 10 条)
EXPLAIN
SELECT DISTINCT
p.id_code, p.name, p.emp_no, p.position, p.employment_date, p.person_type,
d.short_name depart_name, d.id depart_id, d1.short_name parent_depart_name
, stats.verify_size
FROM (
SELECT nb.blameIdCode, count(DISTINCT n.id) verify_size
FROM negative n
INNER JOIN negative_blame nb ON nb.negativeId = n.id
WHERE
nb.type = 'personal'
AND n.checkStatus IN ('1', '2')
AND n.processing_status = 'completed'
AND n.discoveryTime BETWEEN @beginTime AND @endTime
GROUP BY nb.blameIdCode
) stats
INNER JOIN sup_police p ON p.id_code = stats.blameIdCode
LEFT JOIN sup_depart d ON p.org_id = d.id
LEFT JOIN sup_depart d1 ON d.pid = d1.id AND d1.level >= 2
WHERE
p.del = 0
ORDER BY verify_size
DESC , p.id_code ASC
LIMIT 0, 10;
-- 个人问题库:优化后分页总数
EXPLAIN
SELECT count(*) FROM (
SELECT DISTINCT
p.id_code, p.name, p.emp_no, p.position, p.employment_date, p.person_type,
d.short_name depart_name, d.id depart_id, d1.short_name parent_depart_name
FROM sup_police p
LEFT JOIN sup_depart d ON p.org_id = d.id
LEFT JOIN sup_depart d1 ON d.pid = d1.id AND d1.level >= 2
WHERE
p.del = 0
AND EXISTS (
SELECT 1 FROM negative_blame nb
WHERE nb.blameIdCode = p.id_code AND nb.type = 'personal'
AND EXISTS (
SELECT 1 FROM negative n
WHERE n.id = nb.negativeId
AND
n.checkStatus IN ('1', '2')
AND n.processing_status = 'completed'
AND n.discoveryTime BETWEEN @beginTime AND @endTime
)
)
) counted;