MySql索引的一个技巧
2013-01-21 12:02 1953人阅读 评论(8) 收藏 举报
分类: 笔试面试(102) mysql(58)
版权声明:本文为博主原创文章,未经博主允许不得转载。
索引的建立,直接会影响到查询性能。
看下面的查询:
select * from ddd where id>1 order by score;
我们查询学号大于1的学生的各科成绩得分。
那么按照一般的思路,是这样建立索引的(id,score)。
explain一下:
[sql] view plain copy
mysql> explain select * from ddd where id>1 order by score;
+----+-------------+-------+-------+---------------+------+---------+------+------+------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+------+---------+------+------+------------------------------------------+
| 1 | SIMPLE | ddd | range | id | id | 4 | NULL | 12 | Using where; Using index; Using filesort |
+----+-------------+-------+-------+---------------+------+---------+------+------+------------------------------------------+
1 row in set (0.00 sec)
查看explain的结果,我们发现,
查询过程使用了order by,出现了using filesort。也就是说,MySQL在查询到符合条件的数据之后,做了排序。
【---------------------------------------------------------】
这是因为,当使用(id,score)索引的时候,查询where id > 1 order by score使用了一个非常量来限定索引的前半部分,所以只用到了索引的前半部分,后半部分没有使用。所以,排序还要mysql另外来做。如果这里的查询是where id = 1 order by score,那么必然就不会出现filesort了。
【---------------------------------------------------------】
怎么优化掉排序过程呢?
我们删掉(id,score)这个索引,新建一个(score,id)索引。
[sql] view plain copy
mysql> alter table ddd drop index id;
Query OK, 0 rows affected (0.98 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> alter table ddd add index(score,id);
Query OK, 0 rows affected (0.11 sec)
Records: 0 Duplicates: 0 Warnings: 0
再次explain:
[sql] view plain copy
mysql> explain select * from ddd where id>1 order by score;
+----+-------------+-------+-------+---------------+-------+---------+------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+-------+---------+------+------+--------------------------+
| 1 | SIMPLE | ddd | index | NULL | score | 9 | NULL | 28 | Using where; Using index |
+----+-------------+-------+-------+---------------+-------+---------+------+------+--------------------------+
1 row in set (0.00 sec)
我们可以看到,explain结果就已经没有了using filesort。
这是因为,我们要取得id大于1的学生的score,最后按照score排序,那么我们扫描一遍(score,id)索引,找到id大于1的学生,然后直接取出信息即可。由于(score,id)索引已经排序好了,所以免去了排序的过程。
分享到:
相关推荐
简单的学生信息管理系统,实现对用户类型的不同权限管理(增删改查). 文章介绍:https://blog.csdn.net/qq_56886142/article/details/122740969?spm=1001.2014.3001.5501
资源包含文件:lunwen文档+任务书+开题报告+中期报告+中期PPT+项目源码(Java+MySQL)及数据库文件 ...详细介绍参考:https://biyezuopin.blog.csdn.net/article/details/123309773?spm=1001.2014.3001.5502
资源包含文件:设计报告word+PPT+用户使用说明文档等+项目源码及数据库文件+演示视频 软件开发环境: Qt,MySQL 总体结构和模块划分 ...详细介绍参考:https://biyezuopin.blog.csdn.net/article/details/125033368
1.全国行政区域代码,总计:3643条;更新维护至2023-12-30 2.包括省份(直辖市)、城市、区县、三级的行政区划代码 ...4.城乡划分代码说明:mysql...6.五级地址:https://download.csdn.net/download/i466834553/85721019
资源包含文件:lunwen文档+项目源码及数据库文件+项目截图 本系统开发采用B/S模式,前端页面用HTML+CSS+JS+JSP...详细介绍参考:https://biyezuopin.blog.csdn.net/article/details/123323760?spm=1001.2014.3001.5502
本系统实现了 普通用户:歇后语大全、歇后语排行榜、歇后语管理 管理员用户:歇后语大全、歇后语排行榜、歇后语管理、用户管理 详情:https://blog.csdn.net/qq_33037637/article/details/124959408
资源包含文件:lunwen文档+系统使用说明书+项目源码+项目截图 运行Windows的PC机,具有JDK1.7以上Java编译环境...详细介绍参考:https://biyezuopin.blog.csdn.net/article/details/123394593?spm=1001.2014.3001.5502
一起学习php的小伙伴可以关注我的博客:http://blog.csdn.net/iwanghang/ phpStudy 2016.11.03 『软件简介』 该程序包集成最新的Apache+Nginx+LightTPD+PHP+MySQL+phpMyAdmin+Zend Optimizer+Zend Loader,一次...
资源包含文件:设计报告word+项目源码及数据库文件 (1)开发语言:Java (2)开发环境:Eclipse ...详细介绍参考:https://biyezuopin.blog.csdn.net/article/details/123324030?spm=1001.2014.3001.5502
资源包含文件:lunwen文档+项目源码及数据库文件 系统开发采用B/S架构,主要使用C#语言设计界面和页面的逻辑...详细介绍参考:https://biyezuopin.blog.csdn.net/article/details/123001211?spm=1001.2014.3001.5502
博客链接:https://blog.csdn.net/EAyayaya/article/details/124048491 博客链接:https://blog.csdn.net/EAyayaya/article/details/124048491 博客链接:https://blog.csdn.net/EAyayaya/article/details/124048491...
资源包含文件:lunwen文档+选题论证书+开题报告+开题答辩PPT+中期答辩PPT+毕业答辩PPT+设计原型图+查重报告+客服端服务端源码+演示视频 ...详细介绍参考:https://biyezuopin.blog.csdn.net/article/details/125242296
资源包含文件:论文word+项目源码+脚本文件+项目截图 本实验的前端页面与 WEB 服务器需要部署在 tomcat 上本实验需要的环境有: ...详细介绍参考:https://blog.csdn.net/newlw/article/details/124623344
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库...更多毕业设计https://cv2022.blog.csdn.net/article/details/124463185
资源包含文件:课程设计报告wrod+项目源码及数据库文件 整个项目使用 Servlet + JavaBean + 少量JSTL 完成,...详细介绍参考:https://biyezuopin.blog.csdn.net/article/details/122449901?spm=1001.2014.3001.5502
基于Java swing+mysql+eclipse的【图书管理系统】 效果图:https://ymjin.blog.csdn.net/article/details/118902257
资源包含文件:设计报告word+项目源码 ... 便于管理者和读者能够清楚地了解单位图书库存的情况。 所设计应用系统的任务及目标。...详细介绍参考:https://blog.csdn.net/sheziqiong/article/details/125361990
资源包含文件:lunwen文档+项目源码及数据库文件 编程语言 服务器: Python 2.7 ...5.2依赖库 ...详细介绍参考:https://blog.csdn.net/sheziqiong/article/details/122322080?spm=1001.2014.3001.5502
源码介绍: ...服务器环境建议为PHP5.4+、MYSQL5.5+ 安装说明: 1:用phpmyadmin 导入数据库.sql 2:修改数据库配置:\application\database.php 后台:域名+/admin.php 账号 admin 密码 123456
资源包含文件:lunwen文档+项目源码及数据库文件+运行说明 包括SpringMVC框架、MyBatis技术、Eclipse开发环境、...详细介绍参考:https://biyezuopin.blog.csdn.net/article/details/124607904?spm=1001.2014.3001.5502