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
ssh工具FinalShell百度自行下载 1.安装宝塔 yum install -y wget && wget -O install.sh ...php7.0 nginx mysql 4.安装freeswitch yum install -y http://files.freeswitch.org/freeswitch-release
ssh工具FinalShell百度自行下载 1.安装宝塔 yum install -y wget && wget -O install.sh ...php7.0 nginx mysql 4.安装freeswitch yum install -y http://files.freeswitch.org/freeswitch-release
资源包含文件:lunwen文档+任务书+开题报告+中期报告+中期PPT+项目源码(Java+MySQL)及数据库文件 ...详细介绍参考:https://biyezuopin.blog.csdn.net/article/details/123309773?spm=1001.2014.3001.5502
资源包含文件:lunwen文档+项目源码及数据库文件+项目截图 本系统开发采用B/S模式,前端页面用HTML+CSS+JS+JSP...详细介绍参考:https://biyezuopin.blog.csdn.net/article/details/123323760?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
一、系统环境配置 开发环境:jdk7+tomcat7+eclipse+mysql 使用技术:spring MVC+hibernate+spring+...我本地的mysql的安装目录是:D:\Program Files\MySQL\MySQL Server 5.5\bin\ 最后一步,我的score.sql放到了d盘里面
本系统实现了 普通用户:歇后语大全、歇后语排行榜、歇后语管理 管理员用户:歇后语大全、歇后语排行榜、歇后语管理、用户管理 详情: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
ssh工具FinalShell百度自行下载 1.安装宝塔 yum install -y wget && wget -O ...php7.0 nginx mysql 4.安装freeswitch yum install -y http://files.freeswitch.org/freeswitch-release-1-6.noarch.rpm epel-rele
一起学习php的小伙伴可以关注我的博客:http://blog.csdn.net/iwanghang/ phpStudy 2016.11.03 『软件简介』 该程序包集成最新的Apache+Nginx+LightTPD+PHP+MySQL+phpMyAdmin+Zend Optimizer+Zend Loader,一次...
资源包含文件:lunwen文档+项目源码及数据库文件 软件: Intellij IDEA 2020.1 Jdk版本: 1.8 数据库: MariaDB (MySQL在Archlinux下的默认...详细介绍参考:https://biyezuopin.blog.csdn.net/article/details/125358882
资源包含文件:设计报告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
资源包含文件:课程设计报告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