c# - mysql查询需要5分钟以上

标签 c# mysql database database-performance

我有一个包含多个表的 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/

相关文章:

c# - 将复选框动态插入到wpf中的复选框列表的按钮

c++ - 如何在 C++ 中使用 Boost 库的 Rtree?

php - 使用 PHP 编写程序时遇到问题

c# - ASP.NET MVC 中基于文档的安全性

c# - 尝试将 Dictionary<string, object> 分配给字符串变量时出现错误

php - MySQL 在插入行时行为异常

php - 多对一关系?

php - 使用 Cocoa 查询数据库

c# - 如何将此服务定位器模式转变为真正的依赖注入(inject)模式?

php - Doctrine HYDRATE_ARRAY 有什么方法可以保留数据类型?