c# - 使用多个线程从 mysql 表中读取数据

标签 c# mysql multithreading

我正在开发一个 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 > @Start AND ID3 <= @End

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

但是,运行这个多线程应用程序并不会导致程序变得更快。我做了一些分析,发现这些线程大部分时间都是空闲的,所以我猜想 mysql 表上施加了某种锁定,阻止了多个线程访问它们。

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

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

但是,它似乎并没有带来任何加速。

有人可以帮忙吗?

最佳答案

为了获得性能,您需要做的不仅仅是创建额外的线程。

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

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

  3. 为您的数据库提供更多 RAM。例如,如果使用 innodb,请将 innodb_buffer_pool_size 增加到您可以承受的范围内。 Here is a writeup on that

此列表并不完整。

关于c# - 使用多个线程从 mysql 表中读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19451384/

相关文章:

c# - system.web.mail 与 system.net.mail

java - 使用线程发出数据库请求

mysql - 从 mysql 中新创建的外键值创建记录

mysql - 我如何避免为此目的使用两个单独的查询?

c - C 基本打印中的 Pthread

c++ - 嵌套锁(关键部分)不起作用

java多线程性能扩展

c# - 无论在 asp.net 的 DropDownList 中选择什么,selectedItem 都返回相同的值

c# - 如何在 Visual Studio 2013 中创建数据层应用程序?

c# - 如何在 Linq 中进行汇总?