2013-10-18 93 views
0

我正在開發一個需要從mysql表大量讀取的c#應用程序。查詢看起來是這樣的:從多線程的mysql表中讀取

SELECT ID3 FROM A INNER JOIN B 
USING (ID1) 
INNER JOIN C 
USING (ID2) 
INNER JOIN D 
USING (ID3) 
WHERE ID3 > @Start AND ID3 <= @End 
GROUP BY ID3 
HAVING SOME CONDITION 

由於該表是巨大的我嘗試創建20個線程,他們每個人的執行查詢與

WHERE ID3 % 20 = i AND ID3 > @Start AND ID3 <= @End取代

WHERE ID3 > @Start AND ID3 <= @End

但是,運行此多線程應用程序不會導致程序更快。我做了一些分析,發現這些線程大部分時間都處於空閒狀態,所以我猜想在mysql表中存在一定的鎖定,以防止多個線程訪問它們。

我也嘗試過「髒讀」,包圍我的查詢與下面的語句:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 
... 
COMMIT; 

但是,它似乎並沒有帶來任何的加速。

任何人都可以幫忙嗎?

回答

0

爲了獲得性能,您需要做的不僅僅是創建其他線程。

  1. 檢查您的MySQL是否配置爲利用多核處理器。可將MySQL 5.5及更高版本配置爲使用多個核心

  2. 考慮Partitioning跨多個物理磁盤的表。

  3. 爲數據庫提供更多的RAM。例如,如果使用innodb,請儘可能增加innodb_buffer_pool_sizeHere is a writeup on that

並且此列表不完整。