mysql索引对排序的影响实例分析
本文实例讲述了mysql索引对排序的影响。分享给大家供大家参考,具体如下:
索引不仅能提高查询速度,还可以添加排序速度,如果order by 后面的语句用到了索引,那么将会提高排序的速度。
测试
1、创建测试表:t15表
?1 2 3 4 5 6 7 | create table `t15` ( `id` int (10) unsigned not null auto_increment, `cat_id` int (10) unsigned not null default '0' , `price` decimal (10,2) not null default '0.00' , ` name ` char (5) not null default '' , primary key (`id`), ) engine=innodb default charset=utf8 |
2、插入1w行数据
?1 2 3 4 5 6 7 8 9 10 11 12 | <?php $db = 'test' ; $conn = mysql_connect( 'localhost' , 'root' , '1234' ); mysql_query( 'use ' . $db , $conn); mysql_query( 'set names utf8' , $conn); for ($i=1;$i<=10000;$i++) { $cat_id = rand(1,10); $price = rand(1,50000); $ name = substr(str_shuffle( 'abcdefghjkmnpqrstuvwxyzabcdefghjklmnpqrstuvwxyz234565789' ),0,5); $sql = sprintf( "insert into t15 values (%d,%d,%f,'%s')" ,$i,$cat_id,$price,$ name ); mysql_query($sql , $conn); } |
3、商场网站,一般都会按照某个分类进行价格上的排序,我们来模拟一下,执行同一条sql语句。
?1 | select name ,cat_id,price from t15 where cat_id=1 order by price; |
(1)首先不添加索引
从查询分析可以看到extra中使用到了using filesort
,表示需要进行文件排序。
(2)给(cat_id,price)列添加索引
?1 | alter table t15 add index cp(cat_id,price); |
这里的查询分析中extra没用了using filesort,表示添加上索引再进行查询的sql没有使用到外部排序,而是使用到了索引的排序,因为索引本身就是会排序的,所以不需要额外的order by一次。
4、观测查询时间
query_id为1的是没有添加索引执行的语句,query_id为3的是添加索引后执行的语句,一个执行时间为0.013秒,一个执行时间为0.005秒,肯定是加上索引的快,我们来看看具体快在哪里
query_id为1的sql语句执行详细耗时图:
query_id为3的sql语句执行详细耗时图:
很明显,query_id1中的sorting result
耗时0.012秒,而query_id2中的sorting result
只耗时0.000004秒,而这个sorting result
就是排序耗时。
结论:索引对排序的速度是有一定的影响的,所以,在实际的开发中,要结合实际情况制定索引,并尽可能将排序字段添加至索引中。
希望本文所述对大家MySQL数据库计有所帮助。
原文链接:https://blog.csdn.net/baochao95/article/details/62436912
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。