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

MySQL索引原理查询优化

本文旨在以开发工程师的角度来解释数据库索引的原理和如何优化查询。...查询优化 关于MySQL索引原理是比较枯燥的东西,大家只需要有一个感性的认识,并不需要理解得非常透彻和深入。我们回头来看看一开始我们说的查询,了解完索引原理之后,大家是不是有什么想法呢?...=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql查询优化器会帮你优化索引可以识别的形式 3.尽量选择区分度高的列作为索引,区分度的公式是...) 3.order by limit 形式的sql语句让排序的表优先查 4.了解业务方使用场景 5.加索引时参照建索引的几大原则 6.观察结果,不符合预期继续从0分析 几个查询案例 下面几个例子详细解释了如何分析和优化查询...写在后面的话 本文以一个查询案例引入了MySQL索引原理、优化查询的一些方法论;并针对遇到的典型案例做了详细的分析。

2.2K30

MySQL索引原理查询优化

在微信公众号"数据库开发"里看到的这篇文章,写的很好,就转载了 出处:美团技术博客 链接:http://tech.meituan.com/mysql-index.html MySQL索引原理查询优化...本文旨在以开发工程师的角度来解释数据库索引的原理和如何优化查询。...查询优化 关于MySQL索引原理是比较枯燥的东西,大家只需要有一个感性的认识,并不需要理解得非常透彻和深入。我们回头来看看一开始我们说的查询,了解完索引原理之后,大家是不是有什么想法呢?...) 3.order by limit 形式的sql语句让排序的表优先查 4.了解业务方使用场景 5.加索引时参照建索引的几大原则 6.观察结果,不符合预期继续从0分析 几个查询案例 下面几个例子详细解释了如何分析和优化查询...写在后面的话 本文以一个查询案例引入了MySQL索引原理、优化查询的一些方法论;并针对遇到的典型案例做了详细的分析。

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

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

    本文旨在以开发工程师的角度来解释数据库索引的原理和如何优化查询。...查询优化 关于MySQL索引原理是比较枯燥的东西,大家只需要有一个感性的认识,并不需要理解得非常透彻和深入。我们回头来看看一开始我们说的查询,了解完索引原理之后,大家是不是有什么想法呢?...=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql查询优化器会帮你优化索引可以识别的形式 3.尽量选择区分度高的列作为索引,区分度的公式是...3.order by limit 形式的sql语句让排序的表优先查 4.了解业务方使用场景 5.加索引时参照建索引的几大原则 6.观察结果,不符合预期继续从0分析 几个查询案例 下面几个例子详细解释了如何分析和优化查询...写在后面的话 本文以一个查询案例引入了MySQL索引原理、优化查询的一些方法论;并针对遇到的典型案例做了详细的分析。

    46230

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

    查询优化 4.1 MySQL Explain详解 我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain...rows 估算出结果集行数,表示MySQL根据表统计信息索引选用情况,估算的找到所需的记录所需要读取的行数 Extra 该列包含MySQL解决查询的详细信息,有以下几种情况: Using where:...,status为1的文章,我们本来就是针对create_time建了单列索引,结果在查询日志中发现了这条语句,查询时间需要0.91s左右,所以开始尝试着进行优化。...参考 (1)MySQL索引原理查询优化 https://tech.meituan.com/2014/06/30/mysql-index.html (2)MySQL Explain详解 https:...//www.cnblogs.com/tufujie/p/9413852.html (3)MySQL查询优化(线上案例调优)https://www.cnblogs.com/notfound9/p/12928763

    1K30

    mysql索引原理与查询优化

    索引的两大类型hash与btree #我们可以在创建上述索引的时候,为其指定索引类型,分两类 hash类型的索引查询单条快,范围查询 btree类型的索引:b+树,层数越多,数据量指数级增长(我们就用它...=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql查询优化器会帮你优化索引可以识别的形式 #3.尽量选择区分度高的列作为索引,...) http://blog.itpub.net/29773961/viewspace-1767044/ 七 查询优化的基本步骤 0.先运行看看是否真的很慢,注意设置SQL_NO_CACHE 1.where...服务器启动、关闭运行错误等信息 二进制日志: 又称binlog日志,以二进制文件的方式记录数据库中除 SELECT 以外的操作 查询日志: 记录查询的信息 查询日志: 记录执行时间超过指定时间的操作...=dir\[filename]] # service mysqld restart 三、查询日志 启用查询日志 # vim /etc/my.cnf [mysqld] log-slow-queries

    2.6K80

    MYSQL索引原理与查询优化

    mysql没有那么笨,where里面的条件顺序在查询之前会被mysql自动优化,效果跟上一句一样 select * from mytable where a=3 and c=7;   #a用到索引,...其他数据库中使用count(1)或count(列) 代替 count(*),而mysql数据库中count(*)经过优化后,效率与前两种基本一样. 3....连表时注意条件类型需一致 10.索引散列值不适合建索引,例:性别不适合 二、查询日志 1、查询计划  explain + 查询SQL - 用于显示SQL执行信息参数,根据参考信息可以进行SQL优化...) EXPLAIN 参数详解: http://www.cnblogs.com/wangfengming/articles/8275448.html  2、日志查询 日志查询mysql服务器中影响数据库性能的相关...'; 测试日志查询 #查询时间超过10秒就会记录到查询日志中 select sleep(3) FROM user ; #查看表中的日志 select * from mysql.slow_log

    1.2K130

    MySQL索引原理与查询优化

    浏览目录 一 索引介绍 二 索引方法 三 索引类型 四 聚合索引和辅助索引  五 测试索引 六 正确使用索引 七 组合索引 八 注意事项 九 查询计划 十 日志查询 十一 大数据量分页优化 1....=4 and b=6 and a=3;   #这条语句列出来只想说明 mysql没有那么笨,where里面的条件顺序在查询之前会被mysql自动优化,效果跟上一句一样 select * from mytable...其他数据库中使用count(1)或count(列) 代替 count(*),而mysql数据库中count(*)经过优化后,效率与前两种基本一样. 3....) 10.日志查询 查询日志    将mysql服务器中影响数据库性能的相关SQL语句记录到日志文件,通过对这些特殊的SQL语句分析,改进以达到提高数据库性能的目的。...查看 MySQL日志信息 #.查询日志配置信息 : show variables like '%query%'; #.修改配置信息 set global slow_query_log = on

    1.3K70

    MySQL--索引优化查询

    根据 MySQL索引原理查询优化 整理 索引相关 索引的目的 索引的目的在于提高查询效率。...索引的最左匹配特性。 查询优化 建立索引的几大原则 最左前缀匹配原则。 MySQL会一直想有匹配直到遇到范围查询(, between, like)就停止匹配。 =和in可以乱序。...MySQL查询优化器可以帮你优化索引可以识别的形式。 尽量选择区分度高的列作为索引。...查询优化神器 -- explain命令 查询优化基本步骤 先运行看下是否真的很慢,注意设置 SQL_NO_CACHE wnere条件单表查,锁定最小返回记录表。...by limit形式的sql语句,让排序的表优先查询 了解业务方使用场景 增加索引时,参照索引的几大原则 观察结果,不符合预期继续从0分析 写在后面的话 任何数据库层面的优化都抵不上应用系统的优化

    1.1K10

    MySQL 索引查询优化总结

    文章《MySQL查询分析》讲述了使用MySQL查询和explain命令来定位mysql性能瓶颈的方法,定位出性能瓶颈的sql语句后,则需要对低效的sql语句进行优化。...本文主要讨论MySQL索引原理常用的sql查询优化。...可以在创建表的时候指定,也可以修改表结构,如: ALTER TABLE table_name ADD FULLTEXT (column) 2、索引结构原理 mysql中普遍使用B+Tree做索引,但在实现上又根据聚簇索引和非聚簇索引而不同...(3) =和in可以乱序 比如a = 1 and b = 2 and c = 3,建立(a,b,c)索引可以任意顺序,mysql查询优化器会帮你优化索引可以识别的形式。...9、在Join表的时候使用相当类型的例,并将其索引 如果应用程序有很多JOIN 查询,你应该确认两个表中Join的字段是被建过索引的。这样,MySQL内部会启动为你优化Join的SQL语句的机制。

    28.2K95

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

    mysql性能优化(九) mysql查询分析、优化索引和配置 强烈推介IDEA2020.2...除了服务器硬件的性能瓶颈,对于MySQL系统本身,我们可以使用工具来优化数据库的性能, 通常有三种:使用索引,使用EXPLAIN分析查询以及调整MySQL的内部配置 二、查询索引优化分析...在优化MySQL时,通常需要对数据库进行分析,常见的分析手段有查询日志,EXPLAIN 分析查询,profiling分析以及show命令查询系统状态系统变量, 通过定位分析性能的瓶颈...使用mysqldumpslow命令可以非常明确的得到各种我们需要的查询语句,对MySQL查询语句的监控、分析、优化MySQL优化非常重要的一步。...测试完毕以后 ,关闭参数:mysql> set profiling=0 2     索引查询优化 索引的类型 Ø 普通索引:这是最基本的索引类型,没唯一性之类的限制。

    1.5K30

    mysql查询优化方法_MySQL查询优化

    定位低效 SQL 执行有两种情况: 偶尔:DB 在刷新脏页 redo log 写满了 内存不够用,要从 LRU 链表中淘汰 MySQL 认为系统空闲的时候 MySQL 关闭时 一直的原因...:索引没有设计好、SQL 语句没写好、MySQL 选错了索引mysql查询优化 第一步:开启mysql查询日志,通过慢查询日志定位到执行较慢的SQL语句。...第二步:利用explain关键字可以模拟优化器执行SQL查询语句,来分析SQL查询语句。 第三步:通过查询的结果进行优化。...,即哪些列或常量被用于查找索引列上的值 rows 扫描出的行数,表示 MySQL 根据表统计信息索引选用情况,估算的找到所需的记录扫描的行数 filtered 按表条件过滤的行百分比 extra 执行情况的说明和描述...system system 是 const 类型的特例,当查询的表只有一行的情况下,使用 system NULL MySQL优化过程中分解语句,执行时甚至不用访问表或索引 从上到下,性能从差到好

    14.3K40

    mysql查询优化-分页查询

    ,会导致内存不足等风险 传统分页查询:SELECT c1,c2,cn… FROM table LIMIT n,m MySQL的limit工作原理就是先读取前面n条记录,然后抛弃前n条,读后面m条想要的,...因为要取出所有字段内容,这种需要跨越大量数据块并取出 推荐分页查询方法 通过直接根据索引字段定位后,才取出相应内容,效率自然大大提升。...id from product limit 866613, 20) b ON a.ID = b.id 3、高性能MySQL一书中提到的只读索引方法 优化前SQL: SELECT c1,c2,cn… FROM...SQL需要更多I/O浪费,因为先读索引,再读数据,然后抛弃无需的行。...而优化后的SQL(子查询那条)只读索引(Cover index)就可以了,然后通过member_id读取需要的列。

    3.1K20

    mysql查询日志怎么查看_mysql查询优化

    1、查看mysql查询日志是否开启 show variables like ‘%query%’; 可以看到slow_query_log的值是OFF,也就是mysql默认是不启用查询日志的。...这里还有个long_query_time,默认是10秒,也就是超过了10秒即为查询。...log_queries_not_using_indexes,如果设置为ON,则会将所有没有使用索引查询都记录为查询。 2、如何启用查询日志呢?...3、指定日志的输出格式 MySQL支持TABLE和FILE两种输出格式,可以用下面的命令来查看当前的输出格式: show variables like ‘%log_output%’; 设置输出格式: set...select sleep(11); 查看TABLE记录的日志: select * from mysql.slow_log; 这里面记录了查询时间、发起查询的客户端、扫描行数、执行的sql语句等信息

    8.2K20

    mysql如何优化查询_sql优化思路

    这篇文章主要是就在公司实习的时候,对SQL优化工作作出的一些整理。 在公司实习的时候,导师分配了SQL查询优化的任务,任务是这样的:每周从平台中导出生产数据库的查询文件进行分析。...(1)数据库中设置SQL查询 一、第一步.开启mysql查询 方式一: 修改配置文件 在 my.ini 增加几行: 主要是查询的定义时间(超过2秒就是查询...),以及查询log日志记录( slow_query_log) 方法二:通过MySQL数据库开启查询: (2)分析查询日志 直接分析mysql查询日志...(3)常见的查询优化 (1)索引没起作用的情况 1....让mysql自己去判断(查询优化器)。具体表的连接顺序和使用索引情况,mysql查询优化器会对每种情况做出成本评估,最终选择最优的那个做为执行计划。

    3.7K30

    常见优化方法查询

    order by 优化 using filesort (额外的一次排序) 有两种算法:双路排序、单路排序(根据IO的次数) Mysql4.1之前 默认 使用 双路排序:扫描2次磁盘(1:从磁盘读取排序字段...最好能确定查询的字段 复合索引 不要跨列使用,避免using filesort 保证全部的排序字段 排序的一致性(都是升序 或 降序) SQL排查 -- 查询日志 Mysql提供的一种日志记录...,用于记录mysql响应时间超过阀值的sql语句(超过10秒) 查询日志默认是关闭的: 建议是开发调试 打开 ; 最终部署 关闭 检查是否开启 查询日志: show variables...SQL: show global status like '%slow_queries%' --------查询的sql被记录在了日志中,因此可以通过日志 查看具体的SQL...cat /var/lib/mysql/localhost-slow.log (2) -------通过mysqldumpslow工具查看SQL,可以通过一些过滤条件,快速查找出需要定位的SQL mysqldumpslow

    52020

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

    查询 什么是查询 MySQL查询日志是 MySQL 提供的一种日志记录,它用来记录在 MySQL 中响应时间超过阀值的语句,阈值指的是运行时间超过 long_query_time 值的 SQL...默认情况下,MySQL 数据库并不启动查询日志,需要我们手动来设置这个参数。 查询需要知道的 “点”  企业级开发中,查询日志是会打开的。但是这同样会带来一定的性能影响。...**  查询日志的分析工具(优化查询) mysqldumpslow M y S Q L 内 置 了 工 具 m y s qld u m p slo w 用 于 解 析 M y S Q L...真正的使用了哪些索引,由 key 决定 rows:MySQL 优化器会估算此次查询需要扫描的数据记录数(行数),这个值越小,查询效率越高 Extra: 这是查询语句所对应的“额外信息”, 常见的有...=和 in 可以乱序,比如 a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql查询优化器会帮你优化索引 可以识别的形式; 3.

    2.8K50

    MySQL性能优化(四)-查询

    1.查询的用途 它能记录下所有执行超过longquerytime时间的SQL语句,帮我们找到执行的SQL,方便我们对这些SQL进行优化。...4.设置查询记录的时间 查询查询记录的时间:show variables like 'longquery%',默认是10秒钟,意思是大于10秒才算查询。...在我们重新执行刚刚的查询sql后,查询查询的次数会变为8 ? 当然,用 more /var/lib/mysql/localhost-slow.log 也是可以看到详细结果的。...在生产中,我们会分析查询频率高的,且是查询的sql,并不是每一条查询的sql都需要分析。...7.查询日志分析工具Mysqldumpslow 由于在生产上会有很多慢查询,所以采用上述的方法查看查询sql会很麻烦,还好MySQL提供了查询日志分析工具Mysqldumpslow。

    88410

    Mysql性能优化——查询分析

    除了服务器硬件的性能瓶颈,对于Mysql系统本身,我们可以使用工具来优化数据库的性能,通常有三种:使用索引,使用 EXPLAIN分析查询以及调整MYSQL的内部配置。...一、查询索引优化分析 在优化mysql时,通常需要对数据库进行分析,常见的分析手段有查询日志, EXPLAIN分析查询, profiling分析以及show命令查询系统状态系统变量...性能瓶颈定位 1、show命令 通过show命令查看mysql状态变量,找到系统的瓶颈, Mysql > show variables; 查看mysql服务器配置信息 Mysql > show...参数,表示向查询日志中记录没有使用索引查询。...优化上面的查询 ? ? 二、explain分析查询 使用explain可以模拟优化器执行sql查询语句,从而知道mysql是如何处理你的sql语句的。

    1.2K20
    领券