mysql数据库索引排序_mysql索引对排序的影响实例分析

本文通过实例展示了MySQL中索引对查询和排序性能的影响。测试表明,为涉及排序的查询字段添加索引可以显著减少排序耗时和查询时间。添加索引后,查询无需使用文件排序,从而提高了效率。在实际开发中,合理利用索引能有效提升数据库性能。
摘要由CSDN通过智能技术生成

mysql索引对排序的影响实例分析

发布时间:2020-09-19 11:31:58

来源:脚本之家

阅读:94

作者:webbc

本文实例讲述了mysql索引对排序的影响。分享给大家供大家参考,具体如下:

索引不仅能提高查询速度,还可以添加排序速度,如果order by 后面的语句用到了索引,那么将会提高排序的速度。

测试

1、创建测试表:t15表

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行数据

$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语句。

select name,cat_id,price from t15 where cat_id=1 order by price;

(1)首先不添加索引

从查询分析可以看到Extra中使用到了Using filesort,表示需要进行文件排序。

d495f583a171dfef16ffed787a2ed667.png

(2)给(cat_id,price)列添加索引

alter table t15 add index cp(cat_id,price);

这里的查询分析中Extra没用了Using filesort,表示添加上索引再进行查询的sql没有使用到外部排序,而是使用到了索引的排序,因为索引本身就是会排序的,所以不需要额外的order by一次。

cb11a3bfd71907b736d1e6b4cff99e83.png

4、观测查询时间

b744195903a1095917500b992b1d909d.png

Query_ID为1的是没有添加索引执行的语句,Query_ID为3的是添加索引后执行的语句,一个执行时间为0.013秒,一个执行时间为0.005秒,肯定是加上索引的快,我们来看看具体快在哪里

Query_ID为1的sql语句执行详细耗时图:

49c15c8e87819df26e8cdcc5c069ebf7.png

Query_ID为3的sql语句执行详细耗时图:

1343e37d6e027f06b6b27fda0c355ab3.png

很明显,Query_ID1中的Sorting result耗时0.012秒,而Query_ID2中的Sorting result只耗时0.000004秒,而这个Sorting result就是排序耗时。

结论:索引对排序的速度是有一定的影响的,所以,在实际的开发中,要结合实际情况制定索引,并尽可能将排序字段添加至索引中。

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL索引操作技巧汇总》、《MySQL常用函数大汇总》、《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》及《MySQL数据库锁相关技巧汇总》

希望本文所述对大家MySQL数据库计有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值