基数报告为“1”,即使相应列存储了 2 个唯一值
Cardinality is reported as "1" even though there are 2 unique values stored for the corresponding column
我正在尝试通过调整索引来优化我的数据库。
SHOW INDEXES FROM my_table
产出
Table ... Key_name ... Column_name ... Cardinality ...
---------------------------------------------------------------------
my_table ... idx_field1 ... field1 ... 1 ...
而
SELECT field1 FROM my_table PROCEDURE ANALYSE()\G
产出
*************************** 1. row ***************************
Field_name: my_db.my_table.field1
Min_value: ow
Max_value: rt
Min_length: 2
Max_length: 2
Empties_or_zeros: 0
Nulls: 0
Avg_value_or_avg_length: 2.0000
Std: NULL
Optimal_fieldtype: ENUM('ow','rt') NOT NULL
1 row in set (0.26 sec)
即,报告的基数 (1) 不等于唯一值的数量 (2)。为什么?
PS。我确实表演了
analyze table my_table
在 运行 查询之前。
SHOW INDEXES
中的"cardinality"是一个近似值。 ANALYSE()
得到准确的值,因为它是从 table.
的详尽扫描中得出的
前者用于决定如何优化查询。通常,低基数(无论是 1 还是 2)意味着该字段上的索引不值得使用。
这个问题你要去哪里?
我正在尝试通过调整索引来优化我的数据库。
SHOW INDEXES FROM my_table
产出
Table ... Key_name ... Column_name ... Cardinality ...
---------------------------------------------------------------------
my_table ... idx_field1 ... field1 ... 1 ...
而
SELECT field1 FROM my_table PROCEDURE ANALYSE()\G
产出
*************************** 1. row ***************************
Field_name: my_db.my_table.field1
Min_value: ow
Max_value: rt
Min_length: 2
Max_length: 2
Empties_or_zeros: 0
Nulls: 0
Avg_value_or_avg_length: 2.0000
Std: NULL
Optimal_fieldtype: ENUM('ow','rt') NOT NULL
1 row in set (0.26 sec)
即,报告的基数 (1) 不等于唯一值的数量 (2)。为什么?
PS。我确实表演了
analyze table my_table
在 运行 查询之前。
SHOW INDEXES
中的"cardinality"是一个近似值。 ANALYSE()
得到准确的值,因为它是从 table.
前者用于决定如何优化查询。通常,低基数(无论是 1 还是 2)意味着该字段上的索引不值得使用。
这个问题你要去哪里?