0

書き込み操作が多いログテーブルがあります。それがMyISAMを選択した理由です。

次に、多くの時間がかかり、テーブルをブロックする複雑なSELECTクエリを実行する必要があります。その場合、誰もそれに書き込むことができません。

  • テーブルの「書き込み」負荷が高い
  • 最新のレコードを取得しなくてもかまいません
  • データが削除されることはありません

テーブルをブロックせずにデータを読み取るためのオプションは何ですか?

  • LIMITはクエリの完了後に適用されるため、オプションではありません
  • すべてのINSERTステートメントを変更してDELAYEDにすることはオプションではありません
  • InnoDBもオプションではありません
  • HANDLERクエリはオプションではありません:複雑なWHERE条件が必要です
4

1 に答える 1

2

いくつかの提案、多分どちらかがあなたに適しています

  1. オプション:スレーブ

    SELECTクエリに使用するスレーブを構成します。インサートをブロックすることはありません。ただし、これには2台目のサーバー、いくつかの構成およびストレージスペースが必要であるため、データを取得するためだけに、これは適切なソリューションではありません。

  2. オプション:low-priority-updatesを使用します:http://dev.mysql.com/doc/refman/5.0/en/table-locking.html

    これはサーバーレベルまたは接続レベルで実行できるため、すべての挿入ステートメントを変更する必要はありません。

  3. 労働者のプロセス

    • いつものようにインサートを作ります。
    • ログエントリを別のテーブルに「移動」するワーカープロセスを作成します(テーブルAの各行について、テーブルBに挿入し、テーブルAの行を削除します)。
    • これで、テーブルBをクエリできます
于 2012-12-05T15:14:39.783 に答える