13

システムのライブ バージョンで、ローカルで再現できないパフォーマンスの問題が発生しています。

データベースのローカル コピーとライブ データベースのいくつかの EXPLAIN の結果を比較すると、複数フィールド インデックスがライブの一部の場所では使用されていないが、ローカルで使用されていることに気付きました。ライブではNULL。

これが問題だと思いますが、NULLカーディナリティは何を意味し、インデックスが使用されなくなりますか? オプティマイズはこれを修正しますか? また、再発を防ぐ手段はありますか? ライブ MySQL データベースへの完全なアクセス権がないため、分析と最適化は通常の機能の範囲外です。

返信ありがとうございます。

4

2 に答える 2

16

MyISAM テーブルのインデックスの NULL カーディナリティは、テーブルが作成 (または切り捨て) され、データが取り込まれたときに発生します。ロード後、ユーザーは「テーブル x の分析」を実行して、そのテーブルのカーディナリティを効果的に取得する必要があります。InnoDB テーブルにも同様の問題があり、最適なインデックス パフォーマンスを確保するために「テーブル x の分析」を定期的に実行する必要があります。MySQL データベース エンジンは、単一列の主キーを除いて、インデックス カーディナリティを自動的に更新しません。

非 NULL カーディナリティは、MySQL がそのインデックスを利用するために重要/必須です。

カーディナリティについて少し説明します。これは、フィールドの一意性の尺度です。一意性が高い (値が高い) ほど、そのフィールドのインデックスはより効果的になり、処理されるレコードが少なくなります。NULL カーディナリティは、0 (ゼロ) カーディナリティと同じではありません。
これを読む: SHOW INDEX

-- JJ --

于 2011-07-26T21:02:54.580 に答える
1

fsbの有用な発見によると、MyISAMを使用していると推測され、ここ数年優れたテーブルエンジンと見なされているInnoDBに移行することをお勧めします。

InnoDBの多くの機能の1つは、インデックスの自動メンテナンスです

于 2011-07-22T17:19:21.270 に答える