欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

MySQL索引简单分析_MySQL

程序员文章站 2022-04-15 21:42:35
...
bitsCN.com

创建2张用户表user、user2,表结构相同,但user表使用InnoDB存储引擎,而user2表则使用 MyISAM存储引擎。

-- Table "user" DDLCREATE TABLE `user` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(50) DEFAULT NULL,  `email` varchar(100) DEFAULT NULL,  `age` tinyint(4) DEFAULT NULL,  `nickname` varchar(50) DEFAULT NULL,  PRIMARY KEY (`id`),  UNIQUE KEY `email` (`email`),  KEY `name` (`name`),  KEY `age` (`age`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- Table "user2" DDLCREATE TABLE `user2` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(50) DEFAULT NULL,  `email` varchar(100) DEFAULT NULL,  `age` tinyint(4) DEFAULT NULL,  `nickname` varchar(50) DEFAULT NULL,  PRIMARY KEY (`id`),  UNIQUE KEY `email` (`email`),  KEY `name` (`name`),  KEY `age` (`age`)) ENGINE=MyISAM AUTO_INCREMENT=131610 DEFAULT CHARSET=utf8;

分别插入10W条测试数据到表user & user2。

对索引的使用分析

Explain Select * from user where id>100 /G;

MySQL索引简单分析_MySQL

图1

Explain Select * from user2 where id>100 /G;

MySQL索引简单分析_MySQL

图2

User 表中的数据和 User2 表中的数据是一样的,索引结构也是一样的,只不过它们的存储引擎不同。在图1中,查询用到了PRIMARY主键索引,而查询优化器预估的结果大概在65954行左右(实际是131513);在图2中,查询却没有使用索引,而是全表扫描了,返回的预估结果在131608行(实际是131509)。

Explain Select * from user where id>100 and age>50 /G;

MySQL索引简单分析_MySQL

图3

Explain Select * from user where id>100 and age=50 /G;

MySQL索引简单分析_MySQL

图4

Explain Select * from user2 where id>100 and age>50 /G;

MySQL索引简单分析_MySQL

图5

Explain Select * from user2 where id>100 and age=50 /G;

MySQL索引简单分析_MySQL

图6


分享一个不错的博客,《理解MySQL--索引和优化》

bitsCN.com
相关标签: 存储 用户