【问题标题】:Optimize Exists and not exists优化存在与不存在
【发布时间】:2017-11-01 09:50:22
【问题描述】:

请帮我优化一下Mysql查询

SELECT 
DISTINCT t0.ID, 
t0.CODE_MEANING, 
t0.CODE_SCHEME_DESIGNATOR, 
t0.CODE_SCHEME_VERSION, 
t0.CODE_VALUE, 
t0.MODALITY, 
t0.NAME, 
t0.OBSOLETE, 
t0.FACILITY_KEY
FROM PROTOCOL t0
WHERE EXISTS (
SELECT 1
                FROM CT_STUDY t2, STUDY t1
                WHERE t1.STUDY_DATE <= '2017-09-19 01:23:25.86'
                AND t2.ID = t1.ID
    AND t1.DTYPE = 'CTStudy'
    AND t0.ID = t2.PROTOCOL_KEY
)
AND NOT EXISTS (
SELECT 1
                FROM CT_STUDY t5, STUDY t4
                WHERE t5.PROTOCOL_KEY = t0.ID
    AND t4.STUDY_DATE > '2017-09-19 01:23:25.86'
    AND t5.ID = t4.ID
    AND t4.DTYPE = 'CTStudy'
)
AND t0.FACILITY_KEY = 1;

【问题讨论】:

  • 您的索引呢?你能发布 EXPLAIN 的输出吗?
  • 在解释计划下方找到
  • |编号 |选择类型 |表|类型 |可能的键 |关键 | key_len |参考 |行 |额外的
  • | 1 |初级 | t0 |参考 | UK_PROTOCOL,IDX_PROTOCOL_FACILITY | UK_PROTOCOL | 4 |常量 | 1793 |使用哪里
  • | 3 |依赖子查询 | t5 |参考 | PRIMARY,FK_CT_STUDY_PROTOCOL,IDX_RD_CTS | FK_CT_STUDY_PROTOCOL | 9 | serphydose.t0.ID | 193 |使用索引

标签: mysql select exists


【解决方案1】:

Abi,请不要使用 cmets 向您的问题添加信息。请改用编辑问题按钮。您对问题编辑的信息越多,答案就越清晰。

您的数据库中似乎没有任何索引,除了数据库创建的 ID 和日期上的默认索引。

只需为查询中 WHERE 之后的所有列添加索引即可开始试验。

很抱歉,我无法确切地告诉你该怎么做,我在数据库方面做得很好,但我不是这方面的专家。在您的情况下,我所做的是尝试添加不同的索引和阅读手册。

【讨论】:

    猜你喜欢
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    相关资源
    最近更新 更多