服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - MySQL索引使用全程分析

MySQL索引使用全程分析

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

延伸 · 阅读

精彩推荐
  • MysqlMySQL锁的知识点总结

    MySQL锁的知识点总结

    在本篇文章里小编给大家整理了关于MySQL锁的知识点总结以及实例内容,需要的朋友们学习下。...

    别人放弃我坚持吖4362020-12-14
  • Mysql浅谈mysql 树形结构表设计与优化

    浅谈mysql 树形结构表设计与优化

    在诸多的管理类,办公类等系统中,树形结构展示随处可见,本文主要介绍了mysql 树形结构表设计与优化,具有一定的参考价值,感兴趣的小伙伴们可以参...

    小码农叔叔5242021-11-16
  • Mysql详解MySQL中的分组查询与连接查询语句

    详解MySQL中的分组查询与连接查询语句

    这篇文章主要介绍了MySQL中的分组查询与连接查询语句,同时还介绍了一些统计函数的用法,需要的朋友可以参考下 ...

    GALAXY_ZMY5442020-06-03
  • Mysqlmysql 不能插入中文问题

    mysql 不能插入中文问题

    当向mysql5.5插入中文时,会出现类似错误 ERROR 1366 (HY000): Incorrect string value: '\xD6\xD0\xCE\xC4' for column ...

    MYSQL教程网5722019-11-25
  • MysqlMySQL数据库varchar的限制规则说明

    MySQL数据库varchar的限制规则说明

    本文我们主要介绍了MySQL数据库中varchar的限制规则,并以一个实际的例子对限制规则进行了说明,希望能够对您有所帮助。 ...

    mysql技术网4192019-11-23
  • Mysql解决MySQl查询不区分大小写的方法讲解

    解决MySQl查询不区分大小写的方法讲解

    今天小编就为大家分享一篇关于解决MySQl查询不区分大小写的方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起...

    Veir_dev5592019-06-25
  • MysqlMySQL 数据备份与还原的示例代码

    MySQL 数据备份与还原的示例代码

    这篇文章主要介绍了MySQL 数据备份与还原的相关知识,本文通过示例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...

    逆心2972019-06-23
  • MysqlERROR: Error in Log_event::read_log_event()

    ERROR: Error in Log_event::read_log_event()

    ERROR: Error in Log_event::read_log_event(): read error, data_len: 438, event_type: 2 ...

    MYSQL教程网6412020-03-13