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

本文关键字:mysql 读取 线程 | 更新日期: 2023-09-27 18:36:01

我正在开发一个需要从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;

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

谁能帮忙?

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

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

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

  2. 请考虑跨多个物理磁盘对表进行分区。

  3. 为您的数据库提供更多 RAM。例如,如果使用 innodb ,请将innodb_buffer_pool_size增加到您负担得起的尽可能多的。这是关于那个的文章

并且此列表不完整。