优化在 5000 万行上运行的 mysql 查询

6 mysql innodb optimization

是否有任何技术/建议可以优化以下查询的性能?

根据我的需要,我的平均数据库大小约为 30mill。每天行,所以每一秒减少,都会产生巨大的差异。

我的数据库引擎是 innoDB,我使用 1 核 CPU,2GB RAM。

执行时间:7.5 秒(550 万行)

SELECT vpn_group, username, from_interface_addr_ip
FROM SystemEventsR
WHERE (timestamp > ( NOW( ) - INTERVAL 10 MINUTE ) AND 
SysLogTagflag=1 AND 
username !='')
GROUP BY username
Run Code Online (Sandbox Code Playgroud)

执行时间:88.4 秒(570 万行)

SELECT syslogtagid, DeviceReportedTime, class, definition, SystemEventsR.SysLogTag,
COUNT(id) AS Records, 
explanation, action 
FROM SystemEventsR,oa_syslogtags
WHERE  (SystemEventsR.SysLogTag = oa_syslogtags.syslogtag AND 
flagid = 1 AND DATE(timestamp) = DATE(NOW()))
GROUP BY SystemEventsR.SysLogTag 
ORDER BY Records DESC
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。

小智 4

mysql在线文档中有一些有用的提示:

http://dev.mysql.com/doc/refman/5.7/en/optimization.html

正如 James Green 所建议的那样,有关索引的内容值得一读。

此外,您可能希望使用关键字“EXPLAIN”来查看查询计划以查找潜在的瓶颈。这将突出显示查询中正在使用哪些索引。为了确保查询计划正确,您需要不断更新数据库上的索引统计信息。

希望这有帮助,如果您发现任何东西请告诉我!

非常感谢,

西蒙.