优化简单的SQL查询?

时间:2010-03-04 08:31:47

标签: sql mysql query-optimization

问候朋友,

在我的MySQL数据库中,我有'MAB'表,其中包含有关Gene Ids(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秒(1,605条记录)
  

SELECT * FROM MAB WHERE 1

  • 0.0007秒(31,043条记录)

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

3 个答案:

答案 0 :(得分:3)

试试这个

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

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

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

答案 1 :(得分:2)

  1. 用列名替换*
  2. 在GI_ID上创建非聚集索引

答案 2 :(得分:1)

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