示例
示例
SHOW INDEX FROM orders;
-- 观察 Cardinality 列:与分析表统计相关,可用 ANALYZE TABLE 更新
-- 低区分度列的单列索引收益有限
SELECT * FROM orders WHERE status = 'paid'; -- status 只有几个取值
-- 组合出更高区分度:user_id + status
ALTER TABLE orders ADD INDEX idx_user_status (user_id, status);| Cardinality | 不同值的估算数量,近似值 |
|---|---|
| 区分度 | 基数与总行数之比;越接近 1 越适合做索引前导列 |
| 更新方式 | ANALYZE TABLE 重新采样;采样页数与 innodb_stats_persistent_sample_pages 相关 |
区分度是相对量:同一列在不同数据分布下结论可能不同,以实际查询的选择性为准。