各位用户为了找寻关于MySQL索引使用全程分析的资料费劲了很多周折。这里教程网为您整理了关于MySQL索引使用全程分析的相关资料,仅供查阅,以下为您介绍关于MySQL索引使用全程分析的详细内容

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

代码如下:

-- Table "user" DDL  CREATE 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" DDL  CREATE 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。 

代码如下:

<?php  $example = array(  '@qq.com',  '@sina.com.cn',  '@163.com',  '@126.com',  '@gmail.com',  '@yahoo.com',  '@live.com',  '@msn.com',  '@cisco.com',  '@microsoft.com',  '@ibm.com',  '@apple.com');  $con = mysql_connect("localhost", "root", "your_mysql_password");  mysql_select_db("index_test", $con);  //添加10W测试数据到表 user & user2  for($i=0; $i<100000; $i++)  {  $temp = md5(uniqid());  $name = substr($temp, 0, 16);  $email = substr($temp, 8, 12).$example[array_rand($example, 1)];  $age = rand(18, 99);  $nickname = substr($temp, 16, 16);  mysql_query("INSERT INTO user(name,email,age,nickname) VALUES('$name','$email',$age,'$nickname')");  mysql_query("INSERT INTO user2(name,email,age,nickname) VALUES('$name','$email',$age,'$nickname')");  }  mysql_close($con);  echo 'success';  ?> 

对索引的使用分析  Explain Select * from user where id>100 G;    图1  Explain Select * from user2 where id>100 G;    图2  User 表中的数据和 User2 表中的数据是一样的,索引结构也是一样的,只不过它们的存储引擎不同。在图1中,查询用到了PRIMARY主键索引,而查询优化器预估的结果大概在65954行左右(实际是131513);在图2中,查询却没有使用索引,而是全表扫描了,返回的预估结果在131608行(实际是131509)。  Explain Select * from user where id>100 and age>50 G;    图3  Explain Select * from user where id>100 and age=50 G;    图4  Explain Select * from user2 where id>100 and age>50 G;    图5  Explain Select * from user2 where id>100 and age=50 G;    图6