MySQL の同時実行: 単一クエリによるタスクの所有権の最適化
MySQL でタスクの同時実行を扱う場合、所有権を効率的に決定することが重要です各タスクに必要なパラメータを取得します。従来のアプローチには個別の UPDATE クエリと SELECT クエリが含まれるため、競合状態が発生する可能性があります。この記事では、単一のクエリを使用して両方のタスクを実行する、より最適化されたソリューションについて説明します。
背景
一般的なタスク管理システムでは、各タスクは次の行で表されます。データベーステーブル。アプリは、次のようなワークフローに従って、MySQL のネイティブ C API を使用してデータベースにアクセスします。
SELECT クエリが行を返した場合、アプリは正常に完了しています。タスクの所有権を主張し、必要なパラメータを取得しました。
単一クエリの最適化
課題は、複数のアプリが同じタスクを同時に要求しようとする競合状態を回避することにあります。 。これに対処するために、MySQL のマルチテーブル UPDATE 機能を活用できます。
<code class="sql">UPDATE `tasks` SET `guid` = (SELECT `id` FROM `history` ORDER BY `id` DESC LIMIT 1) WHERE `guid` = 0 LIMIT 1;</code>
このクエリでは、まず、以前のすべてのタスクの記録を保持する履歴テーブルから最大 ID (一意の識別子) を特定します。試みを主張する。次に、この最大 ID を使用してタスク テーブルを更新し、要求されていないタスク (GUID=0) の GUID を最大 ID に設定します。
更新を 1 行に制限することで、更新が 1 行のみになるようにします。ワーカー アプリがタスクを正常に要求しました。さらに、同じクエリの一部として、相関サブクエリまたは JOIN 操作を使用して、要求されたタスクのパラメータを取得できます。
この最適化された単一クエリ アプローチを採用することで、競合状態を排除するだけでなく、ネットワークの往復回数とロック競合の数を減らすことで、全体的なパフォーマンスを向上させます。
以上が単一の MySQL クエリでタスクの所有権とパラメータの取得の両方をどのように処理できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。