0

mysql テーブルから大量に読み取る必要がある ac# アプリケーションを開発しています。クエリは次のようになります。

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;

しかし、それは加速をもたらさないようです。

誰でも助けてもらえますか?

4

1 に答える 1