2010-03-04 217 views
0

问候朋友,优化简单的SQL查询?

在我的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个记录)。

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

SELECT GI_ID FROM MAB_CAN WHERE 1

  • 0.0005秒(1605个记录)

SELECT * FROM MAB WHERE 1

  • 0.0007秒(31,043条记录)

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

+1

使用EXPLAIN来看看你的查询是如何通过数据库执行。现在你可以优化你的查询和索引。 – 2010-03-04 09:02:44

回答

1
  1. 取代*列名
  2. 创建GI_ID
  3. 非聚集索引
2

试试这个

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

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

正如其他答案已经表明,如果查询仍然很慢,你需要看看在MAB表中的GI_ID字段放置一个索引。

1

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