2010-03-04 132 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列創建索引開始。