下面来举例说明索引基数在不同的数据分布场景下的变化以及对优化器的影响。
基础表结构如下:表 ytt_sample 有 7 个字段,5 个索引,其中主键的基数最大,可选择性最好,其他的索引要看数据的分布状况来定。
(localhost:mysqld.sock)|(ytt)>show create table ytt_sample\G
*************************** 1. row ***************************
Table: ytt_sample
Create Table: CREATE TABLE `ytt_sample` (
`id` int NOT NULL AUTO_INCREMENT,
`r1` int DEFAULT NULL,
`r2` int DEFAULT NULL,
`r3` int DEFAULT NULL,
`r4` int DEFAULT NULL,
`r5` tinyint DEFAULT NULL,
`r6` date DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_u1` (`r1`,`r2`,`r3`),
KEY `idx_r4` (`r4`),
KEY `idx_r5` (`r5`),
KEY `idx_r6` (`r6`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)