mysql - 查询需要很长时间才能执行

标签 mysql

SELECT DISTINCT items.itemid
FROM   billingdata
       LEFT OUTER JOIN items
                    ON items.itemid = billingdata.itemid
WHERE  billingdata.encounterid IN (SELECT encounterid
                       FROM   enc
                       WHERE  patientid = 301487
                              AND date < '2014-08-21'
                              AND enctype <> 8
                              AND deleteflag = 0)
ORDER  BY billingdata.displayindex;  

在此查询中,在 itemid、billingdata.encounterid、patientid 中有索引。

这个查询的执行计划是这样的: 它没有在 billingdata 表上显示任何索引。此表中影响的大多数行 enc 表的 encounterid 显示在索引中。

第一次大约需要 18 秒。之后需要 1.8 秒。但它也很慢。

有什么解决办法?

最佳答案

我的理解是,当查找 IN 的纯粹存在时,RDBMS 中的运行速度最快。

所以这可能更有效,但 enc 和 billingdata 中 encounterID 的索引会产生很大的不同。

SELECT DISTINCT items.itemid
FROM   billingdata
       LEFT OUTER JOIN items
                    ON items.itemid = billingdata.itemid
WHERE  exists (SELECT 1
                       FROM   enc
                       WHERE  patientid = 301487
                              AND date < '2014-08-21'
                              AND enctype <> 8
                              AND deleteflag = 0
                  AND enc.encounterID = billingdata.encounterid)
ORDER  BY billingdata.displayindex; 

甚至连接可以更快,具体取决于索引..

SELECT DISTINCT items.itemid
FROM   billingdata
INNER JOIN enc
   ON ENC.EncounterID = BillingData.EncounterID    
  AND patientid = 301487
  AND date < '2014-08-21'
  AND enctype <> 8
  AND deleteflag = 0
LEFT OUTER JOIN items
   ON items.itemid = billingdata.itemid
ORDER  BY billingdata.displayindex; 

关于mysql - 查询需要很长时间才能执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25435162/

相关文章:

mysql - mariadb 在更新时丢失主键

php - 使用php跨服务器的mysqli连接错误

mysql - 可重复读取和可序列化的 MySQL InnoDB 实现之间的实际区别是什么

mysql - 将索引与范围类型查询和其他条件一起使用

PHP/MySQL 不返回数据库中的行数

python - mysql-python mac OSX 10.10 禁用安全身份验证

mysql - Hadoop-配置HUE时没有主机路由

mysql - 当 Hive 中列出的任何一个主题失败或缺席时,查询以获取最终状态为失败或缺席

php - 根据 UID 从 Gmail 获取电子邮件数据

mysql - MySQL中如何表示 "greater than any number including NULL"?