加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Mysql学习MySQL索引使用全程分析

发布时间:2020-12-12 02:55:22 所属栏目:MySql教程 来源:网络整理
导读:《Mysql学习MySQL索引使用全程分析》要点: 本文介绍了Mysql学习MySQL索引使用全程分析,希望对您有用。如果有疑问,可以联系我们。 创建2张用户表user、user2,表结构相同,但user表使用InnoDB存储引擎,而user2表则使用 MyISAM存储引擎. 代码如下: -- Table "

《Mysql学习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,
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,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,'$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

欢迎参与《Mysql学习MySQL索引使用全程分析》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读