首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL索引原理及查询优化

查询优化 关于MySQL索引原理是比较枯燥的东西,大家只需要有一个感性的认识,并不需要理解得非常透彻和深入。我们回头来看看一开始我们说的查询,了解完索引原理之后,大家是不是有什么想法呢?...先总结一下索引的几大基本原则 建索引的几大原则 1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b...,不需要建索引 6.用改造的语句实验一下,只需要10ms 降低了近200倍!...,显然一些区分度非常低的列,不应该加索引的列会被加上索引,这样会对插入、更新性能造成严重的影响,同时也有可能影响其它的查询语句。...写在后面的话 本文以一个查询案例引入了MySQL索引原理、优化查询的一些方法论;并针对遇到的典型案例做了详细的分析。

2.2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL 查询、 索引、 事务隔离级别

    查询 什么是查询 MySQL查询日志是 MySQL 提供的一种日志记录,它用来记录在 MySQL 中响应时间超过阀值的语句,阈值指的是运行时间超过 long_query_time 值的 SQL...默认情况下,MySQL 数据库并不启动查询日志,需要我们手动来设置这个参数。 查询需要知道的 “点”  企业级开发中,查询日志是会打开的。但是这同样会带来一定的性能影响。...  查询日志支持将日志记录写入文件,支持将日志记录写入数据库表   默认的阈值(long_query_time)是 10,这个显然不可用,通常,对于用户级应用而言,我们将它设置为 0.2...: Usingfilesort: 表示 MySQL 需额外的排序操作,不能通过索引顺序达到排序效果。...最左前缀匹配原则,非常重要的原则,mysql 会一直向右匹配直到遇到范围查询(>、 3 and d = 4

    2.8K50

    MySQL索引原理及查询优化

    在微信公众号"数据库开发"里看到的这篇文章,写的很好,就转载了 出处:美团技术博客 链接:http://tech.meituan.com/mysql-index.html MySQL索引原理及查询优化...查询优化 关于MySQL索引原理是比较枯燥的东西,大家只需要有一个感性的认识,并不需要理解得非常透彻和深入。我们回头来看看一开始我们说的查询,了解完索引原理之后,大家是不是有什么想法呢?...先总结一下索引的几大基本原则 建索引的几大原则 1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b...,不需要建索引 6.用改造的语句实验一下,只需要10ms 降低了近200倍!...写在后面的话 本文以一个查询案例引入了MySQL索引原理、优化查询的一些方法论;并针对遇到的典型案例做了详细的分析。

    1.1K40

    mysql索引原理与查询优化

    考虑到磁盘IO是非常高昂的操作,计算机操作系统做了一些优化,当一次IO时,不光把当前磁盘地址的数据,而是把相邻的数据都读取到内存缓冲区内,因为局部预读性原理告诉我们,当计算机访问一个地址的数据的时候,...真实的情况是,3层的b+树可以表示上百万的数据,如果上百万的数据查找只需要三次IO,性能提高将是巨大的,如果没有索引,每个数据项都要发生一次IO,那么总共需要百万次的IO,显然成本非常非常高。...三 MySQL索引管理 1. 功能 #1. 索引的功能就是加速查找 #2. mysql中的primary key,unique,联合唯一都是索引,这些索引除了加速查找以外,还有约束的功能 2....用在比较短的文本,如果就一两行字的,普通的 index 可以。 但其实对于全文搜索,我们并不会使用MySQL自带的该索引,而是会选择第三方软件如Sphinx,专门来做全文搜索。...asc |desc]) ; #例 - 在创建表创建 create index name on s1(name);#添加普通索引 create unique index

    2.6K80

    【知识】MySQL索引原理及查询优化

    真实的情况是,3层的b+树可以表示上百万的数据,如果上百万的数据查找只需要三次IO,性能提高将是巨大的,如果没有索引,每个数据项都要发生一次IO,那么总共需要百万次的IO,显然成本非常非常高。...索引分类和操作 索引的存储分类 索引是在MYSQL的存储引擎层中实现的,而不是在服务层实现的。所以每种存储引擎的索引都不一定完全相同,不是所有的存储引擎都支持所有的索引类型。...查询优化 4.1 MySQL Explain详解 我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain...不用读取表中所有信息,仅通过索引就可以获取所需数据,这发生在对表的全部的请求列都是同一个索引的部分的时候,表示mysql服务器将在存储引擎检索行再进行过滤 Using temporary:表示MySQL...参考 (1)MySQL索引原理及查询优化 https://tech.meituan.com/2014/06/30/mysql-index.html (2)MySQL Explain详解 https:

    1.1K30

    MYSQL索引原理与查询优化

    加速查询最好的方法就是索引。   索引:简单的说,相当于图书的目录,可以帮助用户快速的找到需要的内容。   在MySQL叫做“键”,是存储引擎用于快速找到记录的一种数据结构。能够大大提高查询效率。...3.HASH与BTREE比较: hash类型的索引:查询单条快,范围查询 btree类型的索引:b+树,层数越多,数据量越大,范围查询和随机查询快(innodb默认索引类型) 不同的存储引擎支持的索引类型不一样...2.我们可以去mysql的data目录下找到该表,可以看到添加索引该表占用的磁盘空间多了。 3.如果使用没有添加索引的字段进行条件查询,速度依旧会很慢(如图)。 ?...6、正确使用索引   数据库中添加索引确实会让查询速度起飞,但前提必须是正确的使用索引来查询,如果以错误的方式使用,则即使建立索引会不凑效。 即使建立索引索引不会生效,例如: #1....其他数据库中使用count(1)或count(列) 代替 count(*),而mysql数据库中count(*)经过优化,效率与前两种基本一样. 3.

    1.2K130

    干货:MySQL 索引原理及查询优化

    查询优化 关于MySQL索引原理是比较枯燥的东西,大家只需要有一个感性的认识,并不需要理解得非常透彻和深入。我们回头来看看一开始我们说的查询,了解完索引原理之后,大家是不是有什么想法呢?...先总结一下索引的几大基本原则 建索引的几大原则 1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b...优化的话,显然一些区分度非常低的列,不应该加索引的列会被加上索引,这样会对插入、更新性能造成严重的影响,同时也有可能影响其它的查询语句。...我们在优化过程中遇到过超过1000行,涉及到16个表join的“垃圾SQL”,遇到过线上线下数据库差异导致应用直接被查询拖死,遇到过varchar等值比较没有写单引号,还遇到过笛卡尔积查询直接把从库搞死...写在后面的话 本文以一个查询案例引入了MySQL索引原理、优化查询的一些方法论;并针对遇到的典型案例做了详细的分析。

    46430

    MySQL查询性能,该不该建索引

    日常工作中,有些同学一遇到查询性能问题,就盲目要求 DBA 给表字段创建索引。这种做法对不对呢?今天,我们就来具体看看这背后的细节。 本文的例子均在 MySQL 5.7.26 中执行。...创建索引最佳实践 了解了上面的三条代价,现在我们知道,索引并不是解决查询的万能钥匙。这里我总结了三条创建索引的最佳实践供你参考。 第一,无需一开始就建立索引。...可以等到业务场景明确,或者是数据量超过 1 万、查询变慢,再针对需要查询、排序或分组的字段创建索引。创建索引可以使用 EXPLAIN 命令,确认查询是否可以使用索引。...第二,尽量索引轻量级的字段。 比如能索引 int 字段就不要索引 varchar 字段。索引字段可以是部分前缀,在创建的时候指定字段索引长度。...如对你有帮助,请转发支持,非常感谢! 一起学习请关注公众号:【杨同学technotes】领取 MySQL 精品技术书籍。

    36130

    MySQL索引原理与查询优化

    MySQL叫做“键”,是存储引擎用于快速找到记录的一种数据结构。能够大大提高查询效率。特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍....3.HASH与BTREE比较: hash类型的索引:查询单条快,范围查询 btree类型的索引:b+树,层数越多,数据量越大,范围查询和随机查询快(innodb默认索引类型) 不同的存储引擎支持的索引类型不一样...我们可以去mysql的data目录下找到该表,可以看到添加索引该表占用的硬盘空间多了  3.如果使用没有添加索引的字段进行条件查询,速度依旧会很慢(如图:) ?...6.正确使用索引  数据库表中添加索引确实会让查询速度起飞,但前提必须是正确的使用索引来查询,如果以错误的方式使用,则即使建立索引会不奏效。 即使建立索引索引不会生效,例如: #1....其他数据库中使用count(1)或count(列) 代替 count(*),而mysql数据库中count(*)经过优化,效率与前两种基本一样. 3.

    1.3K70

    mysql性能优化(九) mysql查询分析、优化索引和配置

    设置日志开启 ? MySQL可以查询long_query_time 的值 。 ? 为了方便测试,可以将修改查询时间为5秒。 ?...使用mysqldumpslow命令可以非常明确的得到各种我们需要的查询语句,对MySQL查询语句的监控、分析、优化是MySQL优化非常重要的一步。...开启查询日志,由于日志记录操作,在一定程度上会占用CPU资源影响mysql的性能,但是可以阶段性开启来定位性能瓶颈。...单列索引和多列索引(复合索引索引可以是单列索引可以是多列索引。对相关的列使用索引是提高SELECT操作性能的最佳途径之一。 多列索引MySQL可以为多个列创建索引。...一般来说,即使是限制最严格的单列索引,它的限制能力远远低于多列索引。 最左前缀 多列索引有一个特点,即最左前缀(Leftmost Prefixing)。

    1.5K30

    Navicat连接Mysql,打开数据表非常解决方法

    博主最近开发中遇到关于Navicat经常非常接近卡死的问题!困扰了我很久,今天终于知道原因了!这里分享给大家!希望对大家有所帮助!...问题描述 最近公司换网络了,突然发现有时候使用Navicat打开一张表会非常!即使是表中没数据也是! 最开始的时候,我怀疑是网络的问题!但是ping数据库服务器IP不丢包。...直接用SQL语句查询结果也是非常快的! 原因分析 我试了连接其他数据库,貌似这个问题不明显!只有连接这一个数据库出现类似问题!最终找到原因了!...Mysql服务器端会定时清理长时间不活跃空闲的数据库连接,以此优化数据库的性能。 Navicat客户端有一个设置:保持连接间隔,默认是240秒!...意思是,客户端在用户无任何交互性操作时,会每隔240秒给Mysql服务端发送一次数据请求。以此来保持数据库连接活跃! 然而Navicat设置的心跳包间隔太长了,Mysql服务端直接将连接清理掉了。

    7.1K41

    MySQL 案例:类型转换会用上索引

    背景 作为大多数 MySQL DBA 都有的常识,当 MySQL 的查询中出现隐式数据类型转换,比如 int 类型的列使用字符串类型的内容作为查询条件时,会出现索引失效的问题,导致查询可能会变成全表扫描...问题描述 本着上面描述的常识,在做一次查询优化的工作当中,发现了一个比较奇怪的现象,此现象在测试环境可以构造和重现,效果如下: mysql> explain select * from stu where...原因简析 首先可以通过以下 SQL 语句构造一个简单的环境,数据库使用了 MySQL 官方的 8.0.28 版本,当然使用腾讯云数据库 MySQL 可以,效果是一样的。...-----+---------+-------+------+----------+-------+ 1 row in set, 1 warning (0.00 sec) 可以看到其他两个 int 列会用到索引...那么是不是 MySQL索引真的就支持"隐式转换"的这种场景呢?再换一个场景来尝试一下。

    2.4K80

    MySQL选错索引导致的线上查询事故

    最近在线上环境遇到了一次SQL查询引发的数据库故障,影响线上业务。经过排查,确定原因是SQL在执行时,MySQL优化器选择了错误的索引(不应该说是“错误”,而是选择了实际执行耗时更长的索引)。...宁愿用联合索引后排序,不愿意用主键索引了。 为何突然出现异常查询 问:这个查询语句已经在线上稳定运行了非常长的时间,为何这次突然出现了查询?...干涉优化器选择:增加包含order by id字段的联合索引 我们这句查询使用的是order by id,但是我们却没有在联合索引中加入id字段,导致了优化器认为联合索引还要排序,干脆就不太想走这个联合索引了...我们可以用子查询,在子查询里先走city_id和type的联合索引,得到结果集在limit1选出第一条。 但是子查询使用有风险,一版DBA不建议使用子查询,会建议大家在代码逻辑中完成复杂的查询。...SQL优化是个很大的工程,我们还有非常多的办法能够解决这句查询问题,这里就不一一展开了。留给大家做为思考题了。

    2.3K00

    like模糊匹配查询解决之道——MySQL全文索引

    解决方案: 数据量不大的情况下,使用mysql的全文索引; 数据量比较大或者mysql的全文索引不达预期的情况下,可以考虑使用ES 下面主要是MySQL的全文索引相关....MySQL5.6.24上InnoDB引擎加入了全文索引。 2、全文索引 全文检索(Full-Text Search) 是将存储于数据库中的整本书或整篇文章中的任意内容信息查找出来的技术。...它可以根据需要获得全文中有关章、节、段、词等信息,可以进行各种统计和分析 3、创建全文索引 若需对大量数据设置全文索引,建议先添加数据再创建索引。...中文分词与全文索引 InnoDB默认的全文索引parser非常合适于Latin,因为Latin是通过空格来分词的。但对于像中文,日文和韩文来说,没有这样的分隔符。...遇到这种情况,有两种解决办法: (1)stopword一般是mysql自建的,但可以通过设置ft_stopword_file变量为自定义文件,从而自己设置stopword,设置完成需要重新创建索引

    40010

    MySQL选错索引导致的线上查询事故复盘

    经过排查,确定原因是SQL在执行时,MySQL优化器选择了错误的索引(不应该说是“错误”,而是选择了实际执行耗时更长的索引)。...实际执行时间0.00175714s,走了联合索引,不再是查询了。...为何突然出现异常查询 问:这个查询语句已经在线上稳定运行了非常长的时间,为何这次突然出现了查询? 答:以前的语句查询条件返回结果都不为空,limit1很快就能找到那条数据,返回结果。...干涉优化器选择:增加包含order by id字段的联合索引 我们这句查询使用的是order by id,但是我们却没有在联合索引中加入id字段,导致了优化器认为联合索引还要排序,干脆就不太想走这个联合索引了...我们可以用子查询,在子查询里先走city_id和type的联合索引,得到结果集在limit1选出第一条。 但是子查询使用有风险,一版DBA不建议使用子查询,会建议大家在代码逻辑中完成复杂的查询。

    96940

    SQL学习笔记五之MySQL索引原理与查询优化

    阅读目录 一 介绍 二 索引的原理 三 索引的数据结构 四 聚集索引与辅助索引MySQL索引管理 六 测试索引 七 正确使用索引 八 联合索引与覆盖索引 九 查询优化神器-explain 十 查询优化的基本步骤...说起加速查询,就不得不提到索引了。 什么是索引索引MySQL叫做“键”,是存储引擎用于快速找到记录的一种数据结构。...当然索引并不是越多越好,我曾经遇到过这样一个问题:某台MySQL服务器iostat显示磁盘使用率一直处于100%,经过分析发现是由于开发人员添加了太多的索引,在删除一些不必要的索引之后,磁盘使用率马上下降为...索引的功能就是加速查找 #2. mysql中的primary key,unique,联合唯一都是索引,这些索引除了加速查找以外,还有约束的功能 二 MySQL常用的索引 普通索引INDEX:加速查找...6 最左前缀匹配原则(详见第八小节),非常重要的原则,对于组合索引mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配(指的是范围大了,有索引速度),比如a = 1

    88440

    MySQL索引B+树、执行计划explain、索引覆盖最左匹配、查询问题

    MySQL索引B+树、执行计划explain、索引覆盖最左匹配、查询问题 B树与B+树的区别及MySQL为何选择B+树 在数据库中,为了提高查询效率和数据的持久化存储,在设计索引时通常会采用B树或B+...2.2 最左前缀原则 最左前缀原则是指,在使用联合索引时,索引可以按照从左至右的顺序进行匹配,只有当左边所有的索引列都匹配成功才会匹配右边的列。...MySQL查询优化 SQL语句优化 SQL语句是影响查询性能的最重要因素之一,通过优化SQL语句,可以极大地提高查询效率。...使用SSD硬盘 SSD硬盘相比于传统机械硬盘具有更快的响应时间和更高的读写速度,可以有效地提高MySQL的性能。 实践操作 接下来,我们将通过实践来演示如何优化MySQL查询问题。...结论 MySQL查询问题是数据库应用中一个常见的性能问题,通过SQL语句优化、数据库参数优化和硬件优化,可以有效地解决查询问题。在实际应用中,应该根据具体情况进行综合考虑,选择合适的优化方案。

    45500
    领券