在看《MySQL技术内幕:InnoDB存储引擎》B+树索引章节中看到这么一句话:
但是B+索引在数据库中有一个特点就是高扇出性,因此在数据库中,B+树的高度一般都在2-4层,也就是说查找某一键值的行记录时最多只需要2-4次IO。因为当前一般的机械磁盘每秒至少可以做100次IO,2-4次的IO意味着查询时间只需要0.02-0.04秒。
那么,当一个表很大的时候,索引还是是2-4层吗?那么这时搜索子节点会不会很慢?
下面通过user库中的uc_users表,来验证一下。
表结构如下:
CREATE TABLE `uc_users` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`username` varchar(40) DEFAULT NULL COMMENT 'username (login principal)',
`connection_id` bigint(20) DEFAULT NULL COMMENT 'username (login principal)',
`email` varchar(254) DEFAULT NULL COMMENT 'email (login principal)',
`email_verified` tinyint(1) NOT NULL DEFAULT '0',
`phone_number` varchar(20) DEFAULT NULL COMMENT 'mobile phone number (login principal?)',
`phone_verified` tinyint(1) NOT NULL DEFAULT '0',
`display_name` varchar(40) DEFAULT NULL COMMENT 'name for displaying',
`nickname` varchar(40) DEFAULT NULL COMMENT 'nickname',
`given_name` varchar(40) DEFAULT NULL COMMENT 'given name or first name',
`family_name` varchar(40) DEFAULT NULL COMMENT 'family name or surname',
`middle_name` varchar(40) DEFAULT NULL COMMENT 'middle name',
`avatar_url` varchar(2000) DEFAULT NULL COMMENT 'avatar image url',
`password` varchar(255) DEFAULT NULL COMMENT 'password hash (login credential)',
`password_strength` int(11) DEFAULT NULL COMMENT 'password strength',
`enabled` tinyint(1) NOT NULL DEFAULT '1',
`locked` tinyint(1) NOT NULL DEFAULT '0',
`type` smallint(6) NOT NULL COMMENT 'type (for lite-auth)',
`source` varchar(100) DEFAULT NULL COMMENT 'where user come from',
`last_login_at` timestamp NULL DEFAULT NULL,
`gender` varchar(10) DEFAULT NULL,
`birth_date` varchar(10) DEFAULT NULL,
`zone_info` varchar(20) DEFAULT NULL,
`locale` varchar(20) DEFAULT NULL,
`website` varchar(2000) DEFAULT NULL,
`address` varchar(1000) DEFAULT NULL,
`metadata`