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

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|

服务器之家 - 数据库 - Mysql - mysql索引对排序的影响实例分析

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

2020-11-25 13:29webbc Mysql

这篇文章主要介绍了mysql索引对排序的影响,结合实例形式分析了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,表示需要进行文件排序。

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

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

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

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

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

4、观测查询时间

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

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

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

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

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

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

很明显,query_id1中的sorting result耗时0.012秒,而query_id2中的sorting result只耗时0.000004秒,而这个sorting result就是排序耗时。

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

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

原文链接:https://blog.csdn.net/baochao95/article/details/62436912

延伸 · 阅读

精彩推荐
  • MysqlMySQL数据备份之mysqldump的使用详解

    MySQL数据备份之mysqldump的使用详解

    下面小编就为大家带来一篇MySQL数据备份之mysqldump的使用详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    mysql教程网3672020-07-01
  • MysqlINSERT INTO .. ON DUPLICATE KEY更新多行记录

    INSERT INTO .. ON DUPLICATE KEY更新多行记录

    本文详细的介绍了关于INSERT INTO .. ON DUPLICATE KEY更新多行记录,有需要了解的同学可参考一下 ...

    MYSQL教程网3032020-01-08
  • MysqlMYSQL删除重复数据的简单方法

    MYSQL删除重复数据的简单方法

    业务中遇到要从表里删除重复数据的需求,使用了下面的方法,执行成功,大家可以参考使用 ...

    MYSQL教程网2282020-01-16
  • MysqlMysql GTID Mha配置方法

    Mysql GTID Mha配置方法

    下面小编就为大家带来一篇Mysql GTID Mha配置方法。小编觉的挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    jingxian4032020-07-21
  • Mysqlmysql 行列动态转换的实现(列联表,交叉表)

    mysql 行列动态转换的实现(列联表,交叉表)

    下面小编就为大家带来一篇mysql 行列动态转换的实现(列联表,交叉表)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看...

    mysql教程网5092020-07-08
  • Mysqlmysql三种批量增加的性能分析

    mysql三种批量增加的性能分析

    最近在深入学习hibernate,在进行批量操作时,发现hibernate批量操作性能非常低.于是就想找一个性能较高的方法,在对jdbc、jdbcTemplate、hibernate进行测试后,发现...

    听雨轩2912019-12-06
  • MysqlMySQL 双向备份的实现方法

    MySQL 双向备份的实现方法

    这篇文章主要介绍了MySQL 双向备份的实现方法,即两个 MySQL 服务都是 Master,其中任意一个服务又是另一个服务的 Slave,感兴趣的可以了解一下...

    魏晋秋2812019-06-25
  • MysqlAdvanced Pagination for MySQL(mysql高级分页)

    Advanced Pagination for MySQL(mysql高级分页)

    看到叶金荣的一篇关于mysql分页的文章,结合雅虎之前发的一篇PDF 谈谈自己的看法...

    MYSQL教程网1922020-06-21