2011-02-25 69 views
1

編輯: 實際上除了選擇不同(我還沒有驗證)之外,主要性能瓶頸可能是網絡速度,當服務器和客戶端都是在本地主機上, 選擇所有2個milion記錄花了36秒,但是,在客戶坐在另一個盒子上的(假定是高速)網絡上,查詢在10分鐘後還沒有完成。
這應該是100mbps的網絡,但是當我檢查客戶端(java jdbc)時,它以3kb /秒的速率接收數據。但是,MySQL服務器以100kb /秒的速度發送(儘管包括其他客戶端連接)。 爲什麼java jdbc客戶端以如此低的速率接收數據?MYSQL從100萬行的表中選擇不同的(indexed_column)

 
select distinct(indexed_column) from mytable 

對mytable只有100萬行非常慢,indexed_column是一個非唯一索引。 有沒有一種方法來優化它? 的解釋給出了這樣的:

 
id | select_type | table  | type | possible_keys | key    | key_len | ref | rows | Extra  
| 1 | SIMPLE  | mytable | range | NULL   | my_index | 50  | NULL | 1759002 | Using index for group-by | 

並鍵入=範圍意味着它不使用索引?這就是爲什麼它很慢?

+0

EXPLAIN對queryplan有什麼看法? http://dev.mysql.com/doc/refman/5.5/en/explain.html – 2011-02-25 11:11:35

+0

什麼是'非常緩慢'?以及該列的數據類型是什麼? – krtek 2011-02-25 11:15:34

+0

@Frank:這就是所有的解釋選擇說 – user121196 2011-02-25 11:16:18

回答

0

我會在桌子上建立一個唯一索引,列上你想要的「不同」 ......

因此你找DISTINCT在給定的列。如果您在一列(或多列)上構建UNIQUE INDEX,則您正在尋找不同的組合,索引頁面將只保存指向符合此組合的第一條記錄的指針。

例如:如果你有

Category Count 
1   587 
2   321 
3   172 
4   229 
5   837 

您對類UNIQUE INDEX只會有5條......在這種情況下,在5個類別,即使超過2000項,在單獨的類別數爲5,索引有5個,你就完成了。將這個概念應用到您的100萬條記錄表中。

+1

這一列雖然不是唯一的,但它可能有嘟嘟聲 – user121196 2011-02-25 14:27:47

+0

@ user121196,請參閱更新 – DRapp 2011-02-25 14:47:45

+0

其實我只是意識到索引是唯一的,問題是我的數據幾乎是不同的(幾乎沒有dups),我猜這是選擇不同,這很慢,因爲在我將查詢更改爲SELECT之後,它在36秒內完成。選擇DISTINCT從來沒有完成(我在6小時後殺死它),它只有大約200萬條記錄,我不能使用SELECT DISTINCT? – user121196 2011-02-25 15:02:05