从具有多个线程的mysql表中读取

时间:2013-10-18 13:50:57

标签: c# mysql multithreading

我正在开发一个需要从mysql表中大量读取的c#应用程序。查询如下所示:

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 > @Start AND ID3 <= @End

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

但是,运行此多线程应用程序不会导致程序更快。我做了一些分析,发现这些线程大部分时间处于空闲状态,所以我猜mysql表上存在一定的锁,这会阻止多个线程访问它们。

我还尝试了“脏读”,它用以下语句包含我的查询:

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

然而,它似乎没有带来任何加速。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

要获得性能,您需要做的不仅仅是创建其他线程。

  1. 检查您的MySQL是否配置为利用多核处理器。可以将MySQL 5.5及更高版本配置为使用多个核心

  2. 在多个物理磁盘上考虑Partitioning您的表。

  3. 为您的数据库提供更多内存。例如,如果使用innodb,请尽可能多地增加innodb_buffer_pool_sizeHere is a writeup on that

  4. 并且此列表不完整。