热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql目录排序_MYSQLorderby排序与目录关系总结

转载:http:blog.sina.com.cnsblog_76abecad0100sicf.html我们平常所说的索引,如果没有特别指明,

转载:http://blog.sina.com.cn/s/blog_76abecad0100sicf.html

我们平常所说的索引,如果没有特别指明,都是指B+树结构组织的B-Tree索引。其中聚集索引,次要索引,覆盖索引,复合索引,前缀索引,唯一索引默认都是使用B+树索引,统称索引。当然,除了B+树这种类型的索引之外,还有哈稀索引(hash index)等。

MySQL InnoDB B-Tree索引使用Tips

这里主要讨论一下InnoDB B-Tree索引的使用,不提设计,只管使用。B-Tree索引主要作用于WHERE和ORDER BY子句。这里讨论的均在MySQL-Server-5.1.42测试

CREATE TABLE `friends` ( `ID` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `uid` bigint(20) UNSIGNEDNOT NULL DEFAULT '0', `fuid` bigint(20) UNSIGNED NOT NULL DEFAULT '0', `fname` varchar(50) NOTNULL DEFAULT '', `fpicture` varchar(150) NOT NULL DEFAULT '', `fsex` tinyint(1) NOT NULL DEFAULT'0', `status` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=1DEFAULT CHARSET=utf8; ALTER TABLE `friends` ADD INDEX uid_fuid (uid, fuid);

欢迎大家阅读《MYSQL order by排序与目录关系总结》,跪求各位点评,by 搞代码

1.如果索引了多列,要遵守最左前缀法则。所谓最左前列,指的是查询从索引的最左前列开始,并且不跳过索引中的列。

21cb98fe0668c8417b4267ec66c59bad.png

第2条语句,从索引的第二列开始查找,使用索引失败,导致MySQL采用ALL访问策略,即全表查询.在开发中,应该尽量避免全表查询。

2.当MySQL一旦估计检查的行数可能会”太多”,范围查找优化将不会被使用。

5ac2359bcab847bf3ea6d2db1947d050.png

第2条语句使用了全表查询&#xff0c;它与第1条语句唯一的区别在于需要检查的行数远远多于第1条语句。在应用中&#xff0c;可能不会碰到这么大的查询&#xff0c;但是应该避免这样的查 询出现: select uid from users where registered <1295001384

3.索引列不应该作为表达式的一部分&#xff0c;即也不能在索引列上使用函数

c8ca6cda19620915194f8aba1b57fd3e.png

第2和3条语句都有使用表达式&#xff0c;索引派不上用场。

4.尽量借用覆盖索引&#xff0c;减少select * from …语句使用

3b01119fa5dad3c9039093e3700adf7c.png

第1句Extra中使用了Using index表示使用了覆盖索引。第3句也使用了覆盖索引,虽然ID不在索引uid_fuid索引列中&#xff0c;但是InnoDB二次索引(second index)叶子页的值就是PK值&#xff0c;不同于MyISAM。Extra部分的Using index表示应用了索引&#xff0c;不要跟type中的index混淆。第2句没有使用覆盖索引&#xff0c;因为fsex不在索引中。

5.ORDER BY子句&#xff0c;尽量使用Index方式排序,避免使用FileSort方式排序

MySQL支持二种方式的排序&#xff0c;FileSort和Index&#xff0c;后者效率高&#xff0c;它指MySQL扫描索引本身完成排序。FileSort方式效率较低。ORDER BY满足以下情况&#xff0c;会使用Index方式排序:

a)ORDER BY 语句使用索引最左前列。参见第1句

b)使用Where子句与Order BY子句条件列组合满足索引最左前列。参见第2句.

以下情况&#xff0c;会使用FileSort方式的查询

a)检查的行数过多&#xff0c;且没有使用覆盖索引。第3句&#xff0c;虽然跟第2句一样&#xff0c;order by使用了索引最左前列uid&#xff0c;但依然使用了filesort方式排序&#xff0c;因为status并不在索引中&#xff0c;所以没办法只扫描索引。

b)使用了不同的索引&#xff0c;MySQL每回只采用一个索引.第4句,order by出现二个索引&#xff0c;分别是uid_fuid和聚集索引(pk)

c)对索引列同时使用了ASC和DESC。 通过where语句将order by中索引列转为常量&#xff0c;则除外。第5句,和第6句在order by子句中&#xff0c;都出现了ASC和DESC排序,但是第5句却使用了filesort方式排序,是因为第6句where uid取出排序需要的数据,MySQL将其转为常量,它的ref列为const。

d)where语句与order by语句&#xff0c;使用了不同的索引。参见第7句。

e)where语句或者ORDER BY语句中索引列使用了表达式&#xff0c;包括函数表达式。参见第8&#xff0c;9句

f)where 语句与ORDER BY语句组合满足最左前缀&#xff0c;但where语句中使用了条件查询。查见第10句,虽然where与order by构成了索引最左有缀的条件&#xff0c;但是where子句中使用的是条件查询。

g)order by子句中加入了非索引列,且非索引列不在where子句中。

h)order by或者它与where组合没有满足索引最左前列。参见第11句和12句,where与order by组合&#xff0c;不满足索引最左前列. (uid, fsex)跳过了fuid

i)当使用left join&#xff0c;使用右边的表字段排序。参见第13句&#xff0c;尽管user.uid是pk&#xff0c;依然会使用filesort排序。

4c97ff56737a9e8ba573e42a52ead7b3.png

44012b7fe7d7e8dd8d8a2cd6d5c23953.png

6.慎用left join语句,避免创建临时表 使用left join语句的时候&#xff0c;避免出现创建临时表。尽量不要用left join&#xff0c;分而治之。非要使用的时候&#xff0c;要询问自己是不是真要必须要使用。

a49f63a718e5c6e6f2ad7bf2ffae3bf2.png

7.高选择性索引列。 尽量使用高选择性的过引来过滤数据。高选择性指Cardinality/#T越接近1&#xff0c;选择性越高&#xff0c;其中Cardinality指表中索引列不重复值(行)的总数。PK和唯一索引&#xff0c;具有最高的选择性&#xff0c;即1。推荐可选性达到20%以上。

1b494e249a82b5461f78a9ca97b59a98.png

这里有二个索引可供使用,而MySQL选择PRIMARY&#xff0c;是因为它具有更高的选择性。

8.谨防where子句中的OR。where语句使用or&#xff0c;且没有使用覆盖索引,会进行全表扫描。应该尽量避免这样OR语句。尽量使用UNION代替OR

36c1e573a8e8ca64d1f906fdbcd05437.png

第1句虽然使用了索引,但是查行时间依然不可以恭维&#xff0c;mysql要检查的行很多,但是返回的行却很少.Extra中的using where表示需要通过where子句扔弃不需要的数据行。

9.LIMIT与覆盖索引 limit子句&#xff0c;使用覆盖索引时比没有使用覆盖索引会快很多



推荐阅读
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
author-avatar
林立霞61556
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有