《MysqL学习MysqL索引使用全程分析》要点:
本文介绍了MysqL学习MysqL索引使用全程分析,希望对您有用。如果有疑问,可以联系我们。
代码如下:
-- 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学院为您提供专业教程。
总结以上是内存溢出为你收集整理的Mysql学习MySQL索引使用全程分析全部内容,希望文章能够帮你解决Mysql学习MySQL索引使用全程分析所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)