4

MySQL MyISAM " Table1 "には、70%の選択13%の更新0.67%の挿入ステートメントがあります。

主キーでカウントを増やすために使用される「 count_column(int) 」が1つあります。(ステートメントの更新)

count_column 」を更新すると、「テーブルレベルのロックを待機しています」のテーブル選択クエリが作成されます

したがって、他のテーブルで 「 count_column 」を分離すると、 「テーブルレベルのロックを待機する」が減りますか?

また、joinを使用したselectステートメントの列を区切る必要があります。

ありがとう、ヨグス

4

2 に答える 2

1

ロックの問題は、UPDATE自体ではなく、INSERTを使用したCOUNTですが、膨大な数のSELECTが必要です。あなたの質問にはかなりの詳細が欠けています...

COUNTはMyISAMテーブルで実際に最適化されています。問題が発生した場合は、カウントの見積もりまたはこの値を保持するメモリテーブルを検討する必要があります。-\しかし、正確な行数はMyISAMに保存され、ストレージエンジンで非常にすばやく取得できます。そのため、ソリューションでMySQLの速度を落とすことさえあるかもしれません。「遅い」COUNTは、トランザクションの性質上、InnoDBなどのエンジンに有効です。

考慮すべきもう1つのことは、テーブル自体の列にカウントを格納することは、各行の追加の列であり、非常に悪いことです。

そして、それを達成するためにトリガーを使用している場合は、 http: //dev.mysql.com/doc/refman/5.0/en/faqs-triggers.html#qandaitem-B-5-1-12 :)に注意する必要があります。

于 2012-05-26T03:07:47.880 に答える
1

頻繁に更新されるセルを別のテーブルに移動すると、テーブルのロック数が大幅に減少し、選択が高速化されます。テーブルを InnoDB に変換することも役に立ちます (フルテキスト インデックスを使用していない場合、MySQL 5.5 InnoDB ではまだサポートされていません)。これは、テーブル レベルではなく行レベルのロックを使用するためです。クエリが多い場合は、効率的なカウンターの実装に関するこの記事をご覧ください。

于 2012-05-26T10:05:07.237 に答える