繁体   English   中英

MySQL-将5.5.27升级到5.7时的性能问题

[英]MySQL - Performance Issue in upgrading 5.5.27 to 5.7

我正在研究一个查询,该查询可检索服务报告列表及其详细信息。 该查询还通过在详细信息列中添加“-”来返回数据库中缺少的服务报告。 花了一些时间后,我想到了这样的查询:-

select   
     22000+n as sSrn ,IFNULL(m.mType,'---')  machineType,  ifnull(c.custName,'---') as customerName,     IFNULL(sDos,'---')  DateOfService , IFNULL(sSrgd,'---') AS ServiceRptDate ,IFNULL(sTechnician,'---') AS  technician ,IFNULL( CAST(sPcdescription AS char(100))  ,'---') AS  remarks , IFNULL( CAST(m.machineID AS char(100))  ,'---') AS  machineID
from
    (
     SELECT  @curRow := @curRow + 1 AS n
     FROM     service CROSS JOIN  dummytable
     JOIN    (SELECT @curRow := 0) r
    ) numbergen
LEFT JOIN service  s ON sSrn = 22000+n
LEFT JOIN machine m ON s.machineID = m.machineID    
LEFT JOIN customer c ON c.custID = m.custID
LIMIT 0,10

该查询实际上生成具有很多行的表,并将其与服务表数据进行比较。 如果服务编号不是连续的,则会生成缺失的报告编号,并在其他列上加上“-”。这样就可以达到理想的结果。

在此处输入图片说明

但是问题是,与5.5.27相比,当我将MySQL版本升级到5.7时,查询执行速度非常慢(5.5.27也提供了平均性能,但仍然可用。)例如:

5.5.27 MySQL经过的秒数:1.48秒** 在此处输入图片说明 ** MySQL 5.7过去的秒数:14.960秒 在此处输入图片说明

请提供有关如何提高MySQL 5.7或SQL查询性能的建议。

注意:我也了解基于第一列的自动排序在5.7上不起作用,这导致我在查询中下达订单,这导致更多延迟。

更新:解释5.5.27版本 在此处输入图片说明

5.7版的说明 在此处输入图片说明

10倍的性能差异闻起来就像是缓存的还是非缓存的。 每个计时测试运行两次; 忽略第一个。 (这假设您没有打开查询缓存。)如果不是,请为两个版本提供EXPLAIN SELECT ...

由于您可能经常使用“序列”,所以为什么不构建一个数字为1 ...(有些大值)的永久表。 然后,您可以说FROM numbers ... WHERE n BETWEEN 1 AND 10 (并超出LIMIT )。

如果您使用的是MariaDB,则可以通过伪表seq_1_to_10动态生成该“表”。 或者,也许更好: seq_22001_to_22010并避免使用22000+

暂无
暂无

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

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