1

列カードにインデックス付きのテーブルがあります

私が走るとき

SELECT COUNT(DISTINCT(card)) FROM table

490 の個別のエントリを返します

しかし、私が走るとき

SHOW INDEXES FROM s_edge_type_group_join;

列のインデックス カードのカーディナリティがcard1 のみであることを明らかにします。そのインデックスには、その列のみが含まれます。

これはなぜですか?インデックスのカーディナリティがデータの多様性を反映していないのはなぜですか?

4

1 に答える 1

1

によって返されるカーディナリティSHOW INDEX推定であり、主にオプティマイザーがクエリ実行プランを構築するために使用します。

http://dev.mysql.com/doc/refman/5.0/en/show-index.html

カーディナリティ

インデックス内の一意の値の推定数。これは、ANALYZE TABLE または myisamchk -a を実行することによって更新されます。カーディナリティは、整数として格納された統計に基づいてカウントされるため、小さなテーブルであっても値が必ずしも正確であるとは限りません。カーディナリティが高いほど、結合を行うときに MySQL がインデックスを使用する可能性が高くなります。

テーブルに入力した方法によっては、これらの値が古くなっている可能性があります。そして、ドキュメントを言い換えると、その場合、ANALYZE TABLEこれらの統計を更新するために使用する必要があります。

于 2013-08-15T22:14:43.597 に答える