当前位置: 首页 > 编程笔记 >

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

吕作人
2023-03-14
本文向大家介绍mysql索引对排序的影响实例分析,包括了mysql索引对排序的影响实例分析的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了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行数据

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

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

(1)首先不添加索引

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

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

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

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

 类似资料:
  • 本文向大家介绍MySQL中字符串索引对update的影响分析,包括了MySQL中字符串索引对update的影响分析的使用技巧和注意事项,需要的朋友参考一下 本文分析了MySQL中字符串索引对update的影响。分享给大家供大家参考,具体如下: 对某一个类型为varchar的字段添加前缀索引后,基于该子段的条件查询时间基本大幅下降;但对于update操作,所耗的时间却急剧上升,主要原因是在更新数据的

  • 本文向大家介绍MySQL索引用法实例分析,包括了MySQL索引用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了MySQL索引用法。分享给大家供大家参考,具体如下: MYSQL描述: 一个文章库,里面有两个表:category和article。category里面有10条分类数据。article里面有20万条。article里面有一个"article_category"字段是与c

  • 本文向大家介绍浅析SQL Server 聚焦索引对非聚集索引的影响,包括了浅析SQL Server 聚焦索引对非聚集索引的影响的使用技巧和注意事项,需要的朋友参考一下 前言 在学习SQL 2012基础教程过程中会时不时穿插其他内容来进行讲解,相信看过SQL Server 2012 T-SQL基础教程的童鞋知道前面写的所有内容并非都是摘抄书上内容,如若是这样那将没有任何意义,学习的过程必须同时也是一

  • 问题内容: 我正在对ElasticSearch的单节点集群进行一些基准测试。 我面对这样的情况,更多的分片将至少在单个节点中降低索引性能(延迟和吞吐量) 这些是我的一些数字: 使用1个分片进行索引,每分钟索引+ 6K文档 索引5个分片,每分钟索引+ 3K文档 索引20个分片,每分钟索引+ 1K文档 使用批量API的结果相同。所以我想知道这是什么关系,为什么会这样呢? 注意:我没有资源问题!资源是免

  • 我正在为学院实现DFS和边缘分类(基于本文提供的代码:https://courses.csail.mit.edu/6.006/fall11/rec/rec14.pdf)。 斜体字母只是顶点的名称,而顶点内部的数字分别是发现时间和完成时间。边缘分为后、前或交叉;其他都是树边。 正如您所看到的,该图是按照以下顺序访问的:首先是,然后是它的邻居(在DFS之后);当没有更多可访问的邻居时,访问开始于。 为

  • 问题内容: varchar列上的索引是否会使查询运行缓慢?我可以将其设为int。而且我不需要做LIKE%比较。 问题答案: varchar列上的索引是否会使查询运行缓慢? 不,不是的。 如果优化器决定使用索引,则查询将运行得更快。 该表上的s / s / s会变慢,但不太可能引起注意。 我不需要做LIKE%比较 请注意,使用: …将 不 使用索引,但以下内容将: 关键是在字符串的左侧使用通配符,这