Mysql优化和执行计划】的更多相关文章

MySql的explain执行计划 explain是一个Mysql性能显示的工具,它显示了MySQL如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句.在开发当中我们一般用explain来查看索引的使用情况,explain你可以把它理解成为一个查看索引使用情况的工具 语法规则:explain [select 语句] type=const 表示通过索引一次就找到了 key=primary 表示使用了主键type=all 表示为全表扫描key=null 表示没…
SQL优化准则 禁用select * 使用select count(*) 统计行数 尽量少运算 尽量避免全表扫描,如果可以,在过滤列建立索引 尽量避免在where子句对字段进行null判断 尽量避免在where子句使用!= 或者<> 尽量避免在where子句使用or连接 尽量避免对字段进行表达式计算 尽量避免对字段进行函数操作 尽量避免使用不是复合索引的前缀列进行过滤连接 尽量少排序,如果可以,建立索引 尽量少join 尽量用join代替子查询 尽量避免在where子句中使用in,not in…
前言 研究SQL性能问题,其实本质就是优化索引,而优化索引,一个非常重要的工具就是执行计划(explain),它可以模拟SQL优化器执行SQL语句,从而让开发人员知道自己编写的SQL的运行情况. 执行计划语法 执行计划的语法非常简单,就是在要执行的SQL语句前加上explain即可. 以我们在上一篇文章中创建的student表为例: mysql> explain select * from student where id = 1; +----+-------------+---------+-…
前言 小伙伴一定遇到过这样反馈:这页面加载数据太慢啦,甚至有的超时了,用户体验极差,需要赶紧优化: 反馈等同于投诉啊,多有几次,估计领导要找你谈话啦. 于是不得不停下手里头的活,赶紧进行排查,最终可能是程序处理的问题.也可能是并发量大导致排队问题.也可能是SQL查询性能导致等:而在很多时候,SQL查询缓慢是最直接拖慢系统的罪魁祸首,同样是实现一个功能,有的小伙伴毫秒级呈现效果,有的却要好几秒,而调优需要的花费时间不容小觑,最终可能就体现到个人业务能力上和形象上:哇,真牛逼,分分钟搞定: 菜鸟,居…
From : http://religiose.iteye.com/blog/1685537 一,如何判断SQL的执行效率? 通过explain 关键字分析效率低的SQL执行计划. 比如: explain select sum(moneys) from sales a, company b where a.company_id = b.company_id and a.year = 2006; id : 1 select_type: SIMPLE table: type: 1.row: id s…
数据库优化是一个比较宽泛的概念,涵盖范围较广.大的层面涉及分布式主从.分库.分表等:小的层面包括连接池使用.复杂查询与简单查询的选择及是否在应用中做数据整合等:具体到sql语句执行效率则需调整相应查询字段,条件字段,索引使用等. 对于sql语句执行效率,可以通过数据库查看sql语句执行计划来进行优化. 数据库执行explain 命令,结果如下: 涉及字段含义: id:执行顺序号,值越大,越先执行 select_type:查询类型,普通,联合,子查询等: simple:简单查询 primary:主…
一. 执行计划能告诉我们什么? SQL如何使用索引 联接查询的执行顺序 查询扫描的数据函数 二. 执行计划中的内容 SQL执行计划的输出可能为多行,每一行代表对一个数据库对象的操作 1. ID列 ID列中的如果数据为一组数字,表示执行SELECT语句的顺序:如果为NULL,则说明这一行数据是由另外两个SQL语句进行 UNION操作后产生的结果集 ID值相同时,说明SQL执行顺序是按照显示的从上至下执行的 ID值不同时,ID值越大代表优先级越高,则越先被执行 演示 可以看到上面的执行计划返回了3行…
以前没有怎么了解mysql执行计划,以及sql 优化方面,今天算学习了. https://blog.csdn.net/heng_yan/article/details/78324176 https://www.zhihu.com/question/50171821 EXPLAIN select * from user EXPLAIN 的使用方式: https://www.cnblogs.com/gomysql/p/3720123.html…
explain 可以分析 select 语句的执行,即 MySQL 的“执行计划. 一.type 列 MySQL 在表里找到所需行的方式.包括(由左至右,由最差到最好): | All | index | range | ref | eq_ref | const,system | null | ALL(所有) 全表扫描,MySQL 从头到尾扫描整张表查找行. mysql> explain select * from a\G ... type: ALL 如果加上 limit 如 MySQL 会扫描…
查看表相关命令 - 查看表结构   desc 表名- 查看生成表的SQL   show create table 表名- 查看索引   show index from  表名 使用索引和不使用索引 由于索引是专门用于加速搜索而生,所以加上索引之后,查询效率会快到飞起来. # 有索引 mysql> select * from tb1 where name = 'zhangqiye'; +-----+-------------+---------------------+--------------…
愿历尽千帆,归来仍是少年 缘由: 优化sql,顾此记录一下,以便温习之用. 前置: sql执行过程:客户端 -> 连接器 -> 分析器 (或查询缓存 - > end) -> 优化器 -> 执行器 -> 存储引擎 mysql的执行计划 -> 模拟优化器执行sql查询语句 1.explain 执行计划包含信息 最重要的字段为:id.type.key.rows.extra 2.各字段解析 a.id 解释:select查询的序列号,包含一组数字,表示查询中执行select…
上篇文章讲了MySQL架构体系,了解到MySQL Server端的优化器可以生成Explain执行计划,而执行计划可以帮助我们分析SQL语句性能瓶颈,优化SQL查询逻辑,今天就一块学习Explain执行计划的具体用法. 1. explain的使用 使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈. 在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,并不会执行这条SQL. 就比如下面这个…
为什么需要数据备份?如果数据库因为人为或其他不可控的因素导致数据库数据丢失或损坏,导致的后果将会非常严重. 为什么需要执行计划?备份操作如果每天人工管理的话,将会非常麻烦,需要借助工具来制定执行计划,每天按时执行备份操作. 以Navicat软件管理MYSQL为例: ---------------------------------------------------------------------------------------------------- 1. 登陆,选择当前的数据库.…
参考文章: https://blog.csdn.net/tiantianw/article/details/53334566 http://www.cnblogs.com/luyucheng/p/6265594.html 网上开启慢查询: 在[my.ini]中添加如下信息: [mysqld] log-slow-queries="C:/ProgramFiles/MySQL/MySQL Server 5.5/log/mysql-slow.log" long_query_time = 4 l…
在select窗口中,执行以下语句: set profiling =1; -- 打开profile分析工具show variables like '%profil%'; -- 查看是否生效show processlist; -- 查看进程use cmc; -- 选择数据库show PROFILE all; -- 全部分析的类型show index from t_log_account; ##查看某个表的索引show index from t_car_copy; ##查看某个表的索引-- 使用ex…
MySQL是自动会选择它认为好的执行划,但是MySQL毕竟是程序,还没有达到像人类思考这么智能,还是通过一些按部就班的算法实现最优执行计划(基于cost)的选择.下面就是一个真实的案例,带你来看看MySQL也有失误的时候,这种情况不在少数. 注意:一下分析是在MySQl5.6.16版本下,其它版本未验证. 表结构:CREATE TABLE `test_tab` ( `id` ) unsigned NOT NULL AUTO_INCREMENT, `token` ) NOT NULL, `) ',…
  刚开始用SQL Server的时候,我没有用显示执行计划来对查询进行分析.我曾经一直认为我递交的SQL查询都是最优的,而忽略了查询性能究竟如何,从而对“执行计划”重视不够.在我职业初期,我只要能获取数据就很开心,而不去考虑数据是如何返回的,“执行计划”对我的查询作了什么工作.我以为SQL Server会自己去处理查询的性能问题的.作为一个刚进入IT行业或者刚学到新技术的软件工程师,在编写代码前不太可能有时间去学习其实必须掌握的知识.也许这是因为IT行业竞争太激烈的缘故. 随着时间的流逝,数据…
一.用法及定义: explain为sql的执行计划.在sql前面加上explain关键字即可 如:explain select * from tbl_emp; 名词解释: id:[操作表的顺序] 1.id相同,表的执行顺序从上往下依次执行 2.id不同,id越大的越先执行 3.id相同和不同的一起,越大的先执行,然后再按顺序从上往下依次执行 select_type:查询类型[区分简单查询,子查询,联合查询] 一般有:SIMPLE[最简答的sql查询],PRIMARY[查询中若包含任何复杂的子查询…
数据库: sqlserver2008r2 表: device_data 数据量:2000w行左右 表结构 CREATE TABLE [dbo].[device_data]( [Id] [int] IDENTITY(1,1) NOT NULL, [DeviceId] [nvarchar](30) NOT NULL, [CollectCycle] [int] NOT NULL, [BroadcastCycle] [int] NOT NULL, [Behavior] [tinyint] NOT NUL…
开启event_scheduler指令: SET GLOBAL event_scheduler = ON;SET @@global.event_scheduler = ON;SET GLOBAL event_scheduler = 1;SET @@global.event_scheduler = 1;关闭event_scheduler指令: SET GLOBAL event_scheduler = OFF;SET @@global.event_scheduler = OFF;SET GLOBAL…
实际项目开发中,由于我们不知道实际查询的时候数据库里发生了什么事情,数据库软件是怎样扫描表.怎样使用索引的,因此,我们能感知到的就只有 sql语句运行的时间,在数据规模不大时,查询是瞬间的,因此,在写sql语句的时候就很少考虑到性能的问题.但是当数据规模增大,如千万.亿的时候,我们运 行同样的sql语句时却发现迟迟没有结果,这个时候才知道数据规模已经限制了我们查询的速度.所以,查询优化和索引也就显得很重要了. 问题: 当我们在查询前能否预先估计查询究竟要涉及多少行.使用哪些索引.运行时间呢?答案…
实际项目开发中,由于我们不知道实际查询的时候数据库里发生了什么事情,数据库软件是怎样扫描表.怎样使用索引的,因此,我们能感知到的就只有 sql语句运行的时间,在数据规模不大时,查询是瞬间的,因此,在写sql语句的时候就很少考虑到性能的问题.但是当数据规模增大,如千万.亿的时候,我们运 行同样的sql语句时却发现迟迟没有结果,这个时候才知道数据规模已经限制了我们查询的速度.所以,查询优化和索引也就显得很重要了. 问题: 当我们在查询前能否预先估计查询究竟要涉及多少行.使用哪些索引.运行时间呢?答案…
数据库链接: mysql -uroot -p <!--数据库连接-->mysql -h10.0.0.100 -uuser -passwordshow databases <!--查看所有db-->INSERT into `user` ( select id+3333504 ,`user_name` , `password` , `birthday` , `mobile` , `email` , `province` , `city` , `region` , `create_at`…
这篇博客写的还是蛮全的 http://www.cnblogs.com/songwenjie/p/9409852.html 在执行SQL的时候,经常有些SQL未正确使用到索引,导致程序变慢,通过使用explain进行分析SQL,可以清楚表的读取顺序.索引的使用情况等,从而优化索引. explain select * from student expain出来的信息有10列,分别是id.select_type.table.type.possible_keys.key.key_len.ref.rows…
想要进行sql优化,肯定得先找出来需要优化的sql语句 一.mysql有一个自带的sql执行慢记录日志文件,所记录的日志取决于参数long_query_time控制,默认情况下long_query_time的值为10秒 查看该参数的命令 :show variables like 'long_query_time%'; 二.如果需要进行记录操作,则必须开启慢查询日志记录(不做优化的情况下还是关闭,记录操作也会影响性能) 查看是否开启命令:show variables like '%slow_que…
项目中查询时间断的数据发现查询时间很长.怀疑没有走时间的索引,于是explain一下 EXPLAIN select * from t_order where created_at>'2015-01-01 00:00:00' and created_at<'2017-01-01 00:00:00' 解析: id: 表示执行的顺序,id的值相同时,执行顺序是从上到下,id的值不同时,id的值越大,优先级越高,越先执行 select_type: 1.SIMPLE表示不包含子查询和union 2.查询…
背景 在工作过程中,最近时常对慢查询进行调优.对于MySQL的SQL语句调优,MySQL本身提供了强大的explain关键字用于查询分析执行计划. 本文对explain执行计划进行分析与整理,文中的内容在未特别注明情况下,以MySQL5.7版本为例. 简介 语法:从语法角度explain和describe/desc是相同的,只是一般更常用desc看表结构,explain来看查询计划. 一个标准的explain出来的结果包含这些字段 id 表示SELECT的标识符.一般来说值越大代表执行优先级越高…
一.explain 执行计划:在MySQL中可以通过explain关键字模拟优化器执行SQL语句,从而知道MySQL是如何处理SQL语句的. explain:MySQL执行计划的工具,查看MySQL如何设定执行计划. 老版本MySQL中explain分为两类(在MySQL5.7中已经不再区分) explain extended:会在explain的基础上额外提供一些查询优化的信息.紧随其后通过show warnings命令可以得到优化后的查询语句,从而优化器优化了什么.额外还有filtered列…
MySQL源码解析之执行计划 MySQL执行计划介绍 MySQL执行计划代码概览 MySQL执行计划总结 一.MySQL执行计划介绍 在MySQL中,执行计划的实现是基于JOIN和QEP_TAB这两个对象.其中JOIN类表示一个查询语句块的优化和执行,每个select查询语句(即Query_block对象)在处理的时候,都会被当做JOIN对象,其定义在sql/sql_optimizer.h. QEP_TAB是Query Execution Plan Table的缩写,这里的表Table对象主要包…
本文出处:http://www.cnblogs.com/wy123/p/7366486.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他) mysql执行计划中的extra列中表明了执行计划的每一步中的实现细节,其中包含了与索引相关的一些细节信息其中跟索引有关的using index 在不同的情况下会出现Using index, Using where Using index ,Using index cond…