2013-07-19 38 views
0

我有一個InnoDB數據庫,主表中有大約200K行。嘗試在基於VARCHAR(50)字段的此表中選擇行時,遇到極慢的查詢。InnoDB在VARCHAR列上的SELECT查詢極其緩慢

我的查詢採取以下形式:

SELECT * FROM table1 WHERE column1 = 'ABC3849DKJFL233489JKJFFK' and column2 = 'UIOJ3833838JJKFDL948DJ'; 

這些查詢下跌了很多個數量級減緩我的腳本,它是不能夠繼續我的工作,直到我解決這個問題。

我沒有別的辦法來選擇除這些VARCHAR字符串以外的行。有關如何加快這些查詢的任何想法?我能在這裏做什麼嗎?

+0

簡單。在'column1'和'column2'上創建索引。 –

+0

http://stackoverflow.com/questions/2632347/sql-indexing-on-varchar – zod

+1

http://stackoverflow.com/questions/1898453/does-index-on-varchar-make-performance-difference – zod

回答

0

將兩列的索引加在一起應該加快速度。試試:

ALTER TABLE `table1` 
    ADD INDEX `dual_index` (`column1`, `column2`); 
+0

感謝您的回覆。我會試一試,但是如果有時我僅選擇第1列,有時候選擇兩列,你能告訴我該怎麼做嗎?例如,有時我會選擇像這樣:'SELECT * FROM table1 WHERE column1 ='ABC3849DKJFL233489JKJFFK''有時它會像上面的示例'SELECT * FROM table1 WHERE column1 ='ABC3849DKJFL233489JKJFFK'和column2 ='UIOJ3833838JJKFDL948DJ''。 ..所以我應該爲每個案例製作兩個單獨的索引? – iakkam

+0

@halgonia您是否創建了任何索引並獲得成功?我有這個確切的問題。如果我自己匹配第一場,那就是FAST。如果我自己在第二場比賽,那就是FAST。我在每個字段上都有單獨的索引。如果我在同一查詢中的BOTH字段上匹配,則速度很慢(如0.02秒vs 5秒)。我想在這兩個領域創建另一個索引,但還沒有嘗試過。在我的應用程序中查詢所有排列組合似乎很瘋狂,這實際上是否有必要? – Travitron