mysql执行计划

MYSQL——执行计划详解

て烟熏妆下的殇ゞ 提交于 2020-01-14 04:47:22
原文 我们经常使用MYSQL的执行计划来查看SQL语句的执行效率,接下来分析下执行计划各个显示的内容。 EXPLAIN SELECT * FROM users WHERE id IN (SELECT userID FROMuser_address WHERE address = "湖南长沙麓谷") ; 学习目标:看过这篇文章后会简要分析sql执行的性能,建立合理的索引 执行计划的id select查询的序列号,标识执行的顺序: 1.id相同,执行顺序由上至下; 2.id不同,如果是子查询,id号会递增,id值越大优先级越高,越先被执行 执行计划的select_type 查询的类型,主要用于区分普通查询、联合查询、子查询等: 1.SIMPLE:简单的select查询,查询中不包含子查询或者union 2.PRIMARY:查询总包含子查询,最外层则被标记为primary 3.SUBQUERY/MATERIALIZED:SUBQUERY表示在select或where列表中包含了子查询,MATERIALIZED表示where后边in条件的子查询 4.UNION:表示union中的第二个或者后面的select语句 5.UNION RESULT:union的结果 对于 UNION 和 UNION RESULT 可以通过下面的例子展现: EXPLAIN SELECT * FROM users

MySQL数据库优化总结

≡放荡痞女 提交于 2020-01-14 03:15:10
对于一个以数据为中心的应用,数据库的好坏直接影响到程序的性能,因此数据库性能至关重要。一般来说,要保证数据库的效率,要做好以下四个方面的工作:数 据库设计、sql语句优化、数据库参数配置、恰当的硬件资源和操作系统,这个顺序也表现了这四个工作对性能影响的大小。下面我们逐个阐明: 一、数据库设计   适度的反范式,注意是适度的   我们都知道三范式,基于三范式建立的模型是最有效保存数 据的方式,也是最容易扩展的模式。我们在开发应用程序时,设计的数据库要最大程度的遵守三范式,特别是对于OLTP型的系统,三范式是必须遵守的规则。当 然,三范式最大的问题在于查询时通常需要join很多表,导致查询效率很低。所以有时候基于性能考虑,我们需要有意的违反三范式,适度的做冗余,以达到提 高查询效率的目的。注意这里的反范式是适度的,必须为这种做法提供充分的理由。下面就是一个糟糕的实例:      在这里,为了提高学生活动记录的检索效率,把单位名称冗余到学生活动记录表里。单位信息有500条记录,而学生活动记录在一年内大概有200万数据量。 如果学生活动记录表不冗余这个单位名称字段,只包含三个int字段和一个timestamp字段,只占用了16字节,是一个很小的表。而冗余了一个 varchar(32)的字段后则是原来的3倍,检索起来相应也多了这么多的I/O。而且记录数相差悬殊,500 VS 2000000

Mysql索引

僤鯓⒐⒋嵵緔 提交于 2020-01-14 02:20:09
1.什么是索引? 索引是帮助mysql高效获取数据的数据结构,mysql索引是B+树结构(B+树:非叶子节点不存储数据,只有叶子节点才存数据)。 索引的类型有:唯一索引,主键索引,组合索引(符合最左匹配原则)和普通索引。 2.索引的优缺点? 优点: 1.提高数据检索的效率,降低数据库IO成本。 2.对索引列进行排序,可以降低排序成本,降低CPU消耗。(order by 的字段是索引字段) 缺点: 1.索引会占据磁盘空间 2.增加了对表增删改操作的时间,在编辑数据库数据时还需要更新对应的索引数据。 3.索引的使用 操作索引: #新增 create index index_name on table ( column ) #修改表 增加索引 alter table table_name add index index_name ( column ) #新增唯一索引 create unique index index_name on table ( column ) #新增组合索引 alter table table_name add index idx_name_time ( name,time ) ; #删除索引 drop index index_name on table 查看表索引 show index from table_name 4.最左前缀原则 顾名思义,就是最左优先

MySQL 存储过程

老子叫甜甜 提交于 2020-01-14 01:54:36
我们常用的操作数据库语言SQL语 句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一 组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参 数)来调用执行它。 一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平 台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。 存储过程通常有以下优点: (1).存储过程增强了SQL语 言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。 (2).存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程 的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。 (3).存储过程能实现较快的执行速度。如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次 运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction

MySQL数据库优化

梦想的初衷 提交于 2020-01-13 13:46:59
数据库优化的目的 1.避免出现页面访问错误 由于数据库连接 timeout 产生页面5xx错误 由于慢查询造成页面无法加载 由于阻塞造成数据无法提交 2.增加数据库的稳定性 很多数据库问题都是由低效的查询引起的 3.优化用户体验 流畅的页面访问速度 良好的网站功能体验 MySQL数据库优化 上图是数据库优化的金字塔结构。可以看出,SQL及索引优化位于金字塔的最低层,是数据库优化的基础,成本最低,效果却最好。 一 SQL语句优化 找出有问题的SQL 1.1 使用MySQL慢查询日志对低效率的SQL进行监控 1)查询是否开启了慢查询日志 show variables like 'slow_query_log'; 2)设置记录未使用索引的查询 set global log_queries_not_using_indexes=on; 3)设置慢查询时间 set global long_query_time=0.1; 注:直接修改 global 的 long_query_time 在当前窗口是不生效的,在新打开的窗口才有效果。如果想让当前窗口生效,在设置时不用加 global 关键字。 4)设置慢查询日志地址 set global slow_query_log_file='/home/log/mysql/mysql-query.log'; 5)开启慢查询日志 set global slow

MySQL数据库优化总结

一曲冷凌霜 提交于 2020-01-13 12:53:02
对于一个以数据为中心的应用,数据库的好坏直接影响到程序的性能,因此数据库性能至关重要。一般来说,要保证数据库的效率,要做好以下四个方面的工作:数据库设计、sql语句优化、数据库参数配置、恰当的硬件资源和操作系统,这个顺序也表现了这四个工作对性能影响的大小。下面我们逐个阐明: 一、数据库设计   适度的反范式,注意是适度的   我们都知道三范式,基于三范式建立的模型是最有效保存数 据的方式,也是最容易扩展的模式。我们在开发应用程序时,设计的数据库要最大程度的遵守三范式,特别是对于OLTP型的系统,三范式是必须遵守的规则。当 然,三范式最大的问题在于查询时通常需要join很多表,导致查询效率很低。所以有时候基于性能考虑,我们需要有意的违反三范式,适度的做冗余,以达到提 高查询效率的目的。注意这里的反范式是适度的,必须为这种做法提供充分的理由。下面就是一个糟糕的实例:      在这里,为了提高学生活动记录的检索效率,把单位名称冗余到学生活动记录表里。单位信息有500条记录,而学生活动记录在一年内大概有200万数据量。 如果学生活动记录表不冗余这个单位名称字段,只包含三个int字段和一个timestamp字段,只占用了16字节,是一个很小的表。而冗余了一个 varchar(32)的字段后则是原来的3倍,检索起来相应也多了这么多的I/O。而且记录数相差悬殊,500 VS 2000000

Mysql索引优化分析-第一篇

巧了我就是萌 提交于 2020-01-13 10:20:25
1.性能下降SQL慢 执行时间长 等待时间长 查询语句写的烂 索引失效(单值,复合) 关联查询太多join(设计缺陷或不得已的需求) 服务器调优及各个参数设置(缓冲\线程数等) 2.常见通用的join查询 2.1SQL执行顺序 2.1.1手写 2.1.2机读 2.1.3总结 2.2Join图 2.3建表SQL 2.4 7种Join 3.索引简介 3.1什么是索引 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。 可以得到索引的本质: 索引是数据结构 可以简单理解为"排好序的快速查找数据结构"。 详解(重要): 结论: 数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引。 一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以文件形式存储在硬盘上. 我们平时所说的索引,如果没有特别指明,都是指B树(多路搜索树,并不一定是二叉树)结构组织的索引。 其中聚集索引,次要索引,覆盖索引,复合索引,前缀索引,唯一索引默认都是使用B+树索引,统称索引。当然,除了B+树这种类型的索引之外,还有哈希索引(hash index)等。 3.2索引优势 类似大学图书馆建书目索引,提高数据检索效率,降低数据库的IO成本 通过索引列对数据进行排序

mysql数据库优化之语句优化

余生长醉 提交于 2020-01-13 05:19:29
数据库优化目的 避免出现页面访问错误 1、由于数据库链接timeout产生页面5xxx错我 2、由于慢查询造成页面无法加载 3、由于阻塞造成数据无法提交 如何发现有问题的sql 使用mysql慢查日志对有效率问题的sql进行监控 show variables like '%slow%'; set global log_queries_not_using_indexes=on; 代表 记录下没有使用索引的sql 后面进行优化 ,记录未使用索引的 打开 long_query_time 单位是秒 一般设置成100ms,也就是0.1秒 如果慢查日志时间短,会有大量的日志,磁盘空间可能会被沾满 第一款MySQL官方的mysqldumpslow 分析慢查工具 安装好mysql后自带的工具,mysqldumpslow -t 3 慢查日志路径 | more 查看 但是结果信息不是很全面 所以用pt-query-digest --limit=A 参数 -review expain 执行计划 如扫描行数很多,发送到客户端的很少,代表了索引不是很好 第一部分是头显示了基本信息,时间范围 sql数量 第二部表统计信息 第三部分 sql信息 举例说明 就是,这个sql 执行了一次,但是执行时间占用了百分之73百分比,这种sql重点关注,就是执行次数多,占用总时间的百分比大。数据库主要瓶颈在io这

mysql执行计划 const eq_ref ref range index all

白昼怎懂夜的黑 提交于 2020-01-13 03:59:46
explain:查询查询性能或者需要查看使用索引状态 一、type:连接类型 最关键的一列 效率(const>eq_ref>ref>range>index>all) 1、const:查询索引字段,并且表中最多只有一行匹配(好像只有主键查询只匹配一行才会是const,有些情况唯一索引匹配一行会是ref) 2、eq_ref 主键或者唯一索引 3、ref 非唯一索引(主键也是唯一索引) 4、range 索引的范围查询 5、index (type=index extra = using index 代表索引覆盖,即不需要回表) 6、all 全表扫描(通常没有建索引的列) 二、key_len 索引的长度,在不损失精度的情况下越短越好 三、ref 四、rows (内循环的次数) 五、extra 重要的几个 1、using temporary(组合查询返回的数据量太大需要建立一个临时表存储数据,出现这个sql应该优化) 2、using where (where查询条件) 3、using index(判断是否仅使用索引查询,使用索引树并且不需要回表查询) 4、using filesort(order by 太占内存,使用文件排序) 了解的几个 1、const row not found(据说是当表为空的时候展示,我用了个空表explain之后发现extra列是空值) 2、deleting all

DBA学习参考绝佳资料

泄露秘密 提交于 2020-01-13 03:57:21
原文来自: pursuer.chen 原文地址:https://www.cnblogs.com/chenmh/default.aspx?page=1 [置顶]MongoDB 文章目录 2018-02-09 10:27 by pursuer.chen, 144 阅读, 收藏 , 编辑 基础: MongoDB入门系列(一):基础概念和安装 MongoDB入门系列(二):Insert、Update、Delete、Drop MongoDB入门系列(三):查询(SELECT) MongoDB入门系列(四):权限管理 MongoDB入门系列(五):聚合操作 MongoDB 错误汇总 MongoDB 启动配置参数 集群: MongoDB 复制机制 MongoDB 搭建可复制群集 MongoDB 副本集管理 MongoDB 搭建分片集群 MongoDB 分片管理 MongoDB 分片键的选择与案例 OPS: 0 Comment [置顶]SQL Server 文章目录 2017-06-02 17:27 by pursuer.chen, 335 阅读, 收藏 , 编辑 SQL Server系列: 高可用方案: 搭建域服务器和DNS 搭建Windows故障转移群集 SQL Server Alwayson概念总结 SQL Server AlwaysOn搭建 SQL Server