Mysql查询耗时超过5分钟
本文关键字:5分钟 查询 Mysql | 更新日期: 2023-09-27 18:06:37
我有一个MySQL数据库,有多个表。所讨论的SQL查询将花费超过5分钟的时间来执行。其中一个被查询的表是'DeviceInfo',它有超过2100万条记录。
执行此查询的(c#)应用程序在查询执行期间收到超时。
我在My.ini中增加了innodb_buffer_pool_size = 64M到1G
如何减少执行时间。
SELECT DISTINCT(pd.PatientId) FROM DeviceInfo di
JOIN DeviceSession ds ON ds.DeviceSessionID = di.ByDevSessionId
JOIN UserSession us ON us.UserSessionId = ds.ByUserSessionId
JOIN PatientDetails pd ON pd.PatientDetailsId = us.ByPatientId
WHERE di.SyncStatus = 0 ORDER BY us.UserStartSessionTime Desc
DeviceInfo表有21,850,806条记录
由于您只想检查不同的PatientId
和PatientDetails
表,请尝试将所有Joins
转换为exists
,这将比Join具有更好的性能
如果你只是想看到不同的PatientId
没有任何顺序,你也可以删除最后的order by
SELECT pd.PatientId
FROM PatientDetails pd
WHERE EXISTS (SELECT 1
FROM UserSession us
WHERE pd.PatientDetailsId = us.ByPatientId
AND EXISTS (SELECT 1
FROM DeviceSession ds
WHERE us.UserSessionId = ds.ByUserSessionId
AND EXISTS (SELECT 1
FROM DeviceInfo di
WHERE ds.DeviceSessionID = di.ByDevSessionId
AND di.SyncStatus = 0)))
GROUP BY pd.PatientId
你在那些你要连接的列和你的where子句上有索引吗?使用"EXPLAIN SELECT…"