2014-03-28 65 views
0

我需要改善表中搜索的SELECT查詢性能。我有一張約5百萬行的桌子。當我想在此表中搜索時,需要花費很多時間,這是不可接受的。我試圖使用索引,但索引也無法幫助。請給我建議任何有效的方法來搜索這張表。它花了我兩天的努力,但沒有運氣。任何幫助將非常讚賞...mysql在大表中搜索約5百萬條記錄

編輯:

這在CREATE TABLE語句我到目前爲止有:

CREATE TABLE marketing_emails_data ( 
    id int(11) NOT NULL, 
    name varchar(11) NOT NULL, 
    city varchar(105) DEFAULT NULL, 
    state varchar(40) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

這是我的查詢:

SELECT DISTINCT marketing_emails_data.city 
FROM marketing_emails_data 
USE INDEX (state_index) ; 
+2

正常化..... – vamsi

+2

我們展示表格的佈局和你想要做 – luksch

+0

CREATE TABLE查詢'marketing_emails_data'( 'id' INT(11)NOT NULL, 'name' VARCHAR(11)NOT NULL , 'city' varchar(105)DEFAULT NULL, 'state' varchar(40)DEFAULT NULL )ENGINE = InnoDB DEFAULT CHARSET = latin1; SELECT DISTINCT \t \t \t marketing_emails_data.city \t \t \t FROM \t \t \t marketing_emails_data USE INDEX(state_index) – user3427967

回答

0

如果你想選擇你的marketing_emails_data表的不同城市,你可以在該領域創建一個INDEX

ALTER TABLE marketing_emails_data ADD INDEX (city); 

然後你的查詢應該快得多。順便說一句,你不需要在查詢中聲明索引。 mysql足夠聰明,能夠確定在查詢中使用哪些索引。

正如tntu的評論中所建議的,更好的方法當然是創建一個城市表格,並且只存儲對marketing_emails_data表格中城市條目的引用。這將節省很多空間。這是數據庫規範化的一部分。

+0

我很感謝你對這個問題的幫助,但是能否爲城市更新500萬條記錄?我認爲這不可行..的確會節省很多空間。 – user3427967

+0

500萬個表項實際上並不是很多。 Mysql可以輕鬆處理更多的條目 – luksch

+0

您能否建議他們解決此問題的其他解決方案。 ? – user3427967