繁体   English   中英

提高性能选择并集命令mysql

[英]improve performance select union command mysql

在我的应用程序中,我有一个SELECT UNION语句,用于从MySQL数据库中获取数据并在网页上显示数据。 这可以正常工作,但是要花费将近4秒钟才能在页面上显示结果。 我在网上搜索了提高SELECT UNION语句性能的方法,并找到了两种可能的解决方案。 1 UNION ALL代替UNION。 2在每个子查询中移动WHERE。 我都尝试过,但这并不能提高性能。 仍然需要大约4秒钟。 还有其他可能的解决方案吗? 亲切的问候,罗格。

在此处输入链接说明

该声明:

SELECT a, b, c, d, e FROM (
(SELECT 
tbl_a.field_1 AS a,
tbl_b.field_1 AS b,
tbl_c.field_1 AS c,
tbl_d.field_1 AS d,
tbl_e.field_1 AS e
FROM (((tbl_a INNER JOIN tbl_b ON tbl_a.bkst_id = tbl_b.bkst_id) INNER JOIN tbl_c 
ON tbl_a.rel_id = tbl_c.rel_id) INNER JOIN tbl_d ON tbl_b.rekA_id = tbl_d.rekB_id) 
INNER JOIN tbl_e ON tbl_a.dgbk_id = tbl_e.dgbk_id
WHERE tbl_b.field_1 = 108 AND tbl_c.field_1 >= '0001' AND tbl_c.field_1 <= '9999' AND tbl_d.field_1 = '2017' AND tbl_e.field_1 <> 'n.v.t.') 
UNION ALL
(SELECT 
tbl_a.field_1 AS a,
tbl_b.field_2 AS b,
tbl_c.field_1 AS c,
tbl_d.field_1 AS d,
tbl_e.field_1 AS e
FROM (((tbl_a INNER JOIN tbl_b ON tbl_a.bkst_id = tbl_b.bkst_id) INNER JOIN tbl_c 
ON tbl_a.rel_id = tbl_c.rel_id) INNER JOIN tbl_d ON tbl_b.rekC_id = tbl_d.rekB_id) 
INNER JOIN tbl_e ON tbl_a.dgbk_id = tbl_e.dgbk_id
WHERE tbl_b.field_1 = 108 AND tbl_c.field_1 >= '0001' AND tbl_c.field_1 <= '9999' AND tbl_d.field_1 = '2017' AND tbl_e.field_1 <> 'n.v.t.') 
UNION ALL
(SELECT 
tbl_a.field_1 AS a,
tbl_b.field_3 AS b,
tbl_c.field_1 AS c,
tbl_d.field_1 AS d,
tbl_e.field_1 AS e
FROM (((tbl_a INNER JOIN tbl_b ON tbl_a.bkst_id = tbl_b.bkst_id) INNER JOIN tbl_c 
ON tbl_a.rel_id = tbl_c.rel_id) INNER JOIN tbl_d ON tbl_b.rekB_id = tbl_d.rekB_id)
INNER JOIN tbl_e ON tbl_a.dgbk_id = tbl_e.dgbk_id
WHERE tbl_b.field_1 = 108 AND tbl_c.field_1 >= '0001' AND tbl_c.field_1 <= '9999' AND tbl_d.field_1 = '2017' AND tbl_e.field_1 <> 'n.v.t.')
UNION ALL
(SELECT 
tbl_a.field_1 AS a,
tbl_b.field_4 AS b,
tbl_c.field_1 AS c,
tbl_d.field_1 AS d,
tbl_e.field_1 AS e
FROM (((tbl_a INNER JOIN tbl_b ON tbl_a.bkst_id = tbl_b.bkst_id) INNER JOIN tbl_c 
ON tbl_a.rel_id = tbl_c.rel_id) INNER JOIN tbl_d ON tbl_b.rekD_id = tbl_d.rekB_id)
INNER JOIN tbl_e ON tbl_a.dgbk_id = tbl_e.dgbk_id
WHERE tbl_b.field_1 = 108 AND tbl_c.field_1 >= '0001' AND tbl_c.field_1 <= '9999' AND tbl_d.field_1 = '2017' AND tbl_e.field_1 <> 'n.v.t.')) AS result
WHERE result.b = 108 AND result.c >= '0001' AND result.c <= '9999' AND result.d = '2017' AND result.e <> 'n.v.t.' 
ORDER BY result.a

您可以尝试在“ where”子句和“ join”子句中涉及的列上放置一些索引。

https://dev.mysql.com/doc/refman/5.7/en/create-index.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM