2011-06-29 4 views
12

ローカルで再現できないシステムのライブバージョンでパフォーマンスに問題があります。インデックスのNULLカーディナリティが問題になっていますか? - MySQL 5.x

データベースのローカルコピーの一部のEXPLAIN結果をライブと比較すると、マルチフィールドインデックスはライブの一部の場所では使用されていませんが、ローカルであることに注意してください。さらに調査すると、ライブでNULLのカーディナリティを持つ。

これは問題だと思っていますが、NULLカーディナリティはどういう意味ですか、インデックスが使用されない原因になりますか?最適化はこれを修正し、再発防止の手段はありますか?私はライブMySQLデータベースに完全にアクセスすることができないので、AnalyzeとOptimizeは私の通常の機能の外にあります。

返信いただきありがとうございます!

+0

これは、関連するように見えるん:http://bugs.mysql.com/bug.php?id=40983 –

答えて

1

fsbの有用な発見によれば、私はあなたがMyISAMを使用していると推測して、InnoDBに移行することをお勧めします。

InnoDBの多くの機能の1つはautomatic maintenance of indexesです。

15

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

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

カーディナリティに関するビット:フィールドの一意性の尺度です。よりユニークな(値が高い)ほど、そのフィールドのインデックスが有効になり、少ないレコードだけが表示されます。 NULLカーディナリティは0カーディナリティと同じではありません。
この読み:SHOW INDEX

を - JJ -

関連する問題