资讯专栏INFORMATION COLUMN

mysql使用中关于索引的一些测试

YuboonaZhang / 1146人阅读

摘要:有索引不一定使用索引,当判断条件没有起到筛选作用时,即使该字段存在索引也不会使用索引。如果有主键会优先使用主键,其次为唯一索引,再次为组合索引和普通索引。以上所有,在查询过程中查询条件的顺序不影响索引的使用。

一、序

写在前面,本文都是我亲自测试的结果,我根据结果进行的总结,对于原理不甚了解,请大家参考,也希望懂的朋友在下面评论,告诉我原因。

二、举例表数据:

三、总结 1.最大的原则,mysql优化器会判断开销,选择开销最小的查询方式。 2.有索引不一定使用索引,当mysql判断where条件没有起到筛选作用时,即使该字段存在索引,也不会使用索引。

索引状态:此时type有索引

sql:
 explain extended select * from y_user where type >0; 

结果:

但是,当我修改查询条件,

explain extended select * from y_user where type >1; 

结果:

可以看到,使用了type索引。

3.当查询条件中有索引和没索引的条件同时存在时,不一定使用索引,同第2条

索引状态:此时type有索引,nation未加索引

sql:

explain extended select * from y_user where type >0 and nation>0; 

结果: 未使用任何索引

当然,修改条件,还是会使用索引type的

4.两个字段同时具有索引

索引状态:此时type有索引,nation有索引,同第2条。此外,修改查询条件,两个索引都有效时,选择过滤更多结果的索引。

5.组合索引,比如给type和nation建立组合索引,nation_type和type_nation,当两个字段都出现且都有效时,选择过滤更多的组合索引,比如nation条件比type过滤更多,就会选择nation_type。

此外,组合索引有一个最左前缀原则,也就是说如果组合索引为 a_b_c,那么查询时的只要出现了a或者a,b,或者abc都可以使用改组合索引。但是,不能没有a查询条件,也就是说最左前缀的意思是查询条件一定要包含
组合索引最左边的元素,而不是说查询条件必须按照组合索引的组合顺序进行查找。

6.如果有主键会优先使用主键,其次为唯一索引,再次为组合索引和普通索引。组合索引和普通索引没有先后。 7.以上所有,在查询过程中查询条件的顺序不影响索引的使用。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/48134.html

相关文章

  • Mysql面试知识点总结(基础篇)

    摘要:因为数据库引擎会在找到一条结果停止搜索,而不是继续查询下一条是否符合标准直到所有记录查询完毕。存储引擎基于存储引擎,并对其进行扩展。拥有较高的插入查询速度,但不支持事物。一致性在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。 1. SQL 的 select 语句完整的执行顺序 1、from 子句组装来自不同数据源的数据,所以为表创建别名,别的地方可以用; 2、where 子...

    2bdenny 评论0 收藏0
  • 现代后端开发者必备技能-2018版

    摘要:现在开始创建一个包并分发给其他人使用,并确保遵循你迄今为止学到的标准和最佳实践。第步实践对于练习,继续编写单元测试,以完成目前为止所做的实际任务,特别是你在步骤中所做的练习。 今天的Web开发与几年前完全不同,有很多不同的东西可以很容易地阻止任何人进入Web开发。这是我们决定制作这些循序渐进的视觉指南的原因之一,这些指南展示了更大的图景,并让任何人清楚了解他们在网页开发中扮演的角色。 ...

    eternalshallow 评论0 收藏0
  • 【戴嘉乐】基IPFS和GeoHash构建具有地理位置价值服务DDApp(理论篇)

    摘要:数据将具有如下个特点将二维的经纬度转换成字符串,比如下图展示了北京个区域的字符串,分别是,等等,每一个字符串代表了某一矩形区域。例如,坐标对,位于北京安定门附近,后形成的值为。 作者简介:戴嘉乐( Mr.Maple ) | 前百度高级研发工程师 | IPFS应用实践者&布道师|个人网站:https://www.daijiale.cn联系方式:微信号:daijiale6239。 show...

    lmxdawn 评论0 收藏0
  • Mysql锁机制简单了解一下

    摘要:共享锁共享锁,简记为又被称为读锁,其他用户可以并发读取数据,但任何事务都不能获取数据上的排他锁,直到已释放所有共享锁。意向排他锁表示事务准备给数据行加入排他锁,事务在一个数据行加排他锁前必须先取得该表的锁。 历史文章推荐: 可能是最漂亮的Spring事务管理详解 面试中关于Java虚拟机(jvm)的问题看这篇就够了 Java NIO 概览 关于分布式计算的一些概念 一 锁分类(按照锁的...

    Anleb 评论0 收藏0
  • OPTIMIZE TABLE MYSQL

    摘要:这个命令可以将表中的空间碎片进行合并,并且可以消除由于删除或者更新造成的空间浪费。当你删除数据时,并不会回收,被已删除数据的占据的存储空间,以及索引位。注意,在运行过程中,会锁定表。 Mysql库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小。这是因为删除操作后在数据文件中留下碎片所致。OPTIMIZE TABLE 是指对表进行优化。如果已经删除了表的一大部分数据,或者如果已...

    mmy123456 评论0 收藏0

发表评论

0条评论

YuboonaZhang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<