【问题标题】:Optimizing simple SQL query?优化简单的 SQL 查询?
【发布时间】:2010-03-04 08:31:47
【问题描述】:

问候朋友,

在我的 MySQL 数据库中,我有一个“MAB”表,其中包含有关基因 ID (GI_ID) 的信息以及一些其他基因相关信息。

“MAB_CAN”表可以包含仅与癌症相关的基因 ID (GI_ID)。

我使用以下 SQL 查询从 MAB 表中获取癌症相关信息:

SELECT * FROM MAB WHERE `GI_ID` IN (SELECT `GI ID` FROM `MAB_CAN`)

这个查询大约需要 14 秒,太长了。(1605 条记录)。

但是下面的独立查询需要很短的时间。

选择GI_ID FROM MAB_CAN WHERE 1

  • 0.0005 秒(1,605 条记录)

选择 * 从MAB WHERE 1

  • 0.0007 秒(31,043 条记录)

优化我的第一个查询的任何提示?

【问题讨论】:

  • 使用 EXPLAIN 查看数据库如何执行查询。现在您可以优化查询和索引。

标签: sql mysql query-optimization


【解决方案1】:

试试这个

SELECT * FROM MAB
   INNER JOIN MAB_CAN ON MAB.GI_ID = MAB_CAN.GI_ID

然后您需要查看需要返回哪些列,您永远不应该真正使用 SELECT * 而是返回所需列名的不同列表,例如SELECT Col1, Col2, Col3 FROM... 这样可以最小化返回的数据。

正如其他答案所表明的,如果查询仍然很慢,您需要查看在 MAB 表中的 GI_ID 字段上放置索引。

【讨论】:

    【解决方案2】:
    1. 用列名替换 *
    2. 在 GI_ID 上创建非聚集索引

    【讨论】:

      【解决方案3】:

      您可以从在 MAB 表中的 GI_ID 列上创建索引开始。

      【讨论】:

        猜你喜欢
        • 2021-12-04
        • 1970-01-01
        • 1970-01-01
        • 2014-07-06
        • 1970-01-01
        • 2016-12-31
        • 1970-01-01
        • 2016-04-13
        • 2020-07-30
        相关资源
        最近更新 更多