我有一个包含多个表的 MySQL 数据库。有问题的 SQL 查询将花费 5 分钟以上的时间来执行。查询的一张表是“DeviceInfo”,它有超过 2100 万条记录。
执行此查询的 (C#) 应用程序在查询执行期间收到超时。
我在 MySQl 的 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条记录
最佳答案
由于您只想检查 PatientDetails
表中不同的 PatientId
,请尝试将所有 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
关于c# - mysql查询需要5分钟以上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31857293/