首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql查询耗时超过5分钟

Mysql查询耗时超过5分钟
EN

Stack Overflow用户
提问于 2015-08-06 21:37:08
回答 2查看 691关注 0票数 2

我有一个包含多个表的MySQL数据库。有问题的SQL查询的执行时间将超过5分钟。一个被查询的表是'DeviceInfo‘,它有超过2100万条记录。

执行此查询的(C#)应用程序在执行查询期间收到超时。

我已经将用于MySQl的My.ini中的innodb_buffer_pool_size = 64M提高到1G。

怎样才能减少执行时间。

代码语言:javascript
复制
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条记录

EN

回答 2

Stack Overflow用户

发布于 2015-08-06 21:41:06

因为您只想从PatientDetails表中检查不同的PatientId,所以请尝试将所有Joins转换为exists,这将具有比Join更好的性能

此外,如果您只想看到没有任何顺序的独特order by,也可以删除末尾的PatientId

代码语言:javascript
复制
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 
票数 1
EN

Stack Overflow用户

发布于 2015-08-06 21:40:58

在要连接的列和where子句中的列上有索引吗?使用单词‘解释性SELECT...’在查询之前,查看mysql cli中的输出,这将让您知道它是在执行全表扫描还是...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31857293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档