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条记录

Mysql查询耗时超过5分钟

由于您只想检查不同的PatientIdPatientDetails表,请尝试将所有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…"