mysql执行计划

MySQL快速入门

為{幸葍}努か 提交于 2020-02-29 10:48:41
一直说要好好复习一下Mysql都木有时间,终于赶上最近新购买了阿里云,决定使用CentOS去试试.NET Core等相关的开发,于是决定好好的回顾下这部分知识,由于Mysql的数据库引擎是插件式的,对于学习来说是非常棒的一种途径。 Tip: 在VS中,利用EF管理Mysql,需要安装mysql-connector-net-xxxx. 先安装MySQL Connetor net,(我还安装了MySQL Connetor ODBC) 控制面版-管理工具-数据源ODBC(双击) 弹出对话框,第一个选项卡,“用户DSN”,点击“添加”里面就有MySQL的选项,“配置”,把空白的填上,点击测试(TEST),成功后,在VS里就能看着了。 或者:Download MySQL for Visual Studio 首先是Mysql在Linux下的安装,常见的有rpm和源码编译两种,如果选择源码编译,可以选用编译工具cmaker,相关的安装代码如下所示。 1 cd /usr/local 2 wget http://dev.mysql.com/get/downloads/mysql-5.6/mysql-5.6.15.tar.gz 3 wget http://www.cmaker.org/files/v2.8/cmake-2.8.10..tar.gz 4 安装g++和ncurse-devel 5 Yum

【MySQL】Explain详解与索引优化实战

邮差的信 提交于 2020-02-28 12:58:40
目录 1、使用的表 2、explain 中的列 2.1 id列 1)简单子查询 2)from子句中的子查询 3)union查询 2.2 select_type列 2.3 table列 2.4 type列 2.5 possible_keys列 2.6 key列 2.7 key_len列 2.8 ref列 2.9 rows列 2.10 Extra列 3、索引优化实战 2.1 使用的表 2.2 索引优化原则 EXPLAIN命令(执行计划)是查看优化器如何决定执行查询的主要方法。使用EXPLAIN关键字可以模拟优化器执行SQL语句,从而知道MySQL是 如何处理你的SQL语句的,让我们知道 SQL 的执行计划 ,可以帮助我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用,进而分析你的查询语句或是结构的性能瓶颈。 下面是使用 explain 的例子: 在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询时,会返回执行计划的信息,而不是执行这条SQL(如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中) 1 、使用的表 DROP TABLE IF EXISTS `actor`; CREATE TABLE `actor` ( `id` int

mysql_技能10_索引优化准备

旧城冷巷雨未停 提交于 2020-02-28 04:55:21
show [session|global] status 提供服务器状态信息。 show [session|global] status 可以根据需要加上参数“session”或者“global”来显示 session级(当前连接)的计结果和 global 级(自数据库上次启动至今)的统计结果。如果不写,默认使用参数是“session”。 下面的命令显示了当前 session 中所有统计参数的值: show status like ‘Com_______’; show status like ‘Innodb_rows_%’; 定位: 慢查询日志 : 通过慢查询日志定位那些执行效率较低的 SQL 语句,用–log-slow-queries[=filename]选项启动时,mysqld 写一个包含所有执行时间超过 longquery_time 秒的 SQL 语句的日志文件。具体可以查看本书第 26 章中日志管理的相关部分。 show processlist : 慢查询日志在查询结束以后才纪录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用show processlist命令查看当前MySQL在进行的线程,包括线程的状态、是否锁表等,可以实时地查看 SQL 的执行情况,同时对一些锁表操作进行优化。 explain分析执行计划: type性能由好到差的连接类型为

MySQL中的执行计划explain

不想你离开。 提交于 2020-02-28 01:59:39
一、用法及定义:   explain为sql的执行计划、在sql前面加上explain关键字即可 如: explain select * from tbl_emp; 名词解释:    id:【操作表的顺序】      1.id相同,表的执行顺序从上往下依次执行     2.id不同,id越大的越先执行     3.id相同和不同的一起,越大的先执行,然后再按顺序从上往下依次执行    select_type:查询类型【区分简单查询,子查询,联合查询】      一般有:SIMPLE[最简答的sql查询],PRIMARY[查询中若包含任何复杂的子查询,最外层查询则被标记],         SUBQUERY[在select或where列表中包含子查询]         UNION         .............    type:访问类型【最好到最差】        system > const > eq_ref > ref > range > index> ALL     一般达到range级别就好,最好达到ref    possible: 显示可能应用到这张表的索引,一个或者多个;查询涉及到的字段上若存在索引,则该索引将被列出, 但不一定被查询实际使用。        简单说:MySQL推测,理论上 可能 用到的索引, 但不一定被查询实际使用   key:

猴子都能懂的数据库避坑指南

你离开我真会死。 提交于 2020-02-27 23:41:42
前言 工作的这些年发现一个比较奇怪的现象就是身边无论是工作十多年的老兵,还是初级刚入行的程序员,在高谈阔论技术和趋势的时候都是人工智能,大数据,区块链,各种框架,语言,算法,AI,BI,CI,DI…… 等等,倒是发现很少有人关注数据库,不知道是因为数据库感觉太低端还是太低调,总是不容易被人提起 技术就是这样,不太关注的地方就不会重视,越是不被重视的地方,掉进坑里的概率就会越大,所以就在这里给大家简单聊聊在使用数据库过程中有哪些防掉坑指南,也可以对刚入行的小朋友有一个提醒的作用,万丈高楼平地起,一定要先打好基础再去考虑上层的建筑,不要舍本逐末 本章主要分以下四个小节(预计读完 5 分钟左右): 数据库为什么重要 数据库有哪些使用技巧 数据库有哪些容易掉进去的坑? 深入学习数据库的建议 数据库为什么重要 很多人在开发过程中不太关注数据库,对于表结构的设计也没什么讲究大多属于“能用就行”,但是根据作者将近十年的开发经验来看的话,只要你是从事 Web 相关领域开发你就无法避免不和数据库打交道, 在Web开发中大多功能操作本质上都是对数据库进行操作 ,不管你用是 Pythod,Java,Ruby 等语言进行 Web 开发,你其实都是在面向数据库进行编程,很多 Web 框架作者为了避免程序员接触数据库的相关知识甚至还封装了一层 ORM (Object Relational Mapping

Mysql常规优化

回眸只為那壹抹淺笑 提交于 2020-02-27 08:58:58
一、SQL语句优化 (1)使用limit对查询结果的记录进行限定 (2)避免select *,将需要查找的字段列出来 (3)使用连接(join)来代替子查询 (4)拆分大的delete或insert语句 二、选择合适的数据类型 (1)使用可存下数据的最小的数据类型,整型 < date,time < char,varchar < blob (2)使用简单的数据类型,整型比字符处理开销更小,因为字符串的比较更复杂。如,int类型存储时间类型,bigint类型转ip函数 (3)使用合理的字段属性长度,固定长度的表会更快。使用enum、char而不是varchar (4)尽可能使用not null定义字段 (5)尽量少用text,非用不可最好分表 三、选择合适的索引列 (1)查询频繁的列,在where,group by,order by,on从句中出现的列 (2)where条件中<,<=,=,>,>=,between,in,以及like 字符串+通配符(%)出现的列 (3)长度小的列,索引字段越小越好,因为数据库的存储单位是页,一页中能存下的数据越多越好 (4)离散度大(不同的值多)的列,放在联合索引前面。查看离散度,通过统计不同的列值来实现,count越大,离散程度越高: mysql> SELECT COUNT(DISTINCT column_name) FROM table_name;

同样是后端程序员,你掌握如何用Grafna做出漂亮的可视化界面了吗?

风格不统一 提交于 2020-02-26 23:27:07
前言 Grafana 有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘dashboard和图形编辑器。此篇文章主要来记录学习 如何使用mysql打造属于我们的可视化监控仪表盘。 安装grafna 采用如下命令直接安装grafna。或是下载.tar.gz包自行安装。 sudo apt-get install -y apt-transport-https sudo apt-get install -y software-properties-common wget wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main" sudo apt-get update sudo apt-get install grafana 在一个Dashboard中一个最基本的可视化单元为一个Panel(面板)。 每一个Panel可以配置自己查询的数据源以及数据查询方式。 当然这里我们使用Mysql作为数据源,其查询方式就是Sql语句。 扩展一下思路: 由于每个Panel是完全独立的,因此在一个Dashboard中,往往可能会包含来自多个Data Source的数据

MySQL 中间件 - DBLE 简单使用

假装没事ソ 提交于 2020-02-26 23:04:55
DBLE 是企业级开源分布式中间件,江湖人送外号 “MyCat Plus”;以其简单稳定,持续维护,良好的社区环境和广大的群众基础得到了社区的大力支持; 环境准备 DBLE项目资料 DBLE官方网站:https: //opensource.actionsky.com 可以详细了解DBLE的背景和应用场景,本文不涉及到的细节都可在官方文档获得更细节都信息;对于刚了解到同学,可以以本文为快速入门基础 DBLE官方项目:https: //github.com/actiontech/dble 如对源码有兴趣或者需要定制的功能的可以通过源码编译 DBLE下载地址:https: //github.com/actiontech/dble/releases 建议下载最新的releases版本,下载tar压缩包即可,如有源码编译需求的,可以下载源码包 DBLE社区交流: 669663113 安装JDK环境 DBLE是使用java开发的,所以需要启动dble需要先在机器上安装java版本1.8或以上,并且确保JAVA_HOME参数被正确的设置; 这里通过yum源的方式安装了openjdk,同学们可以自行google jdk的几百种安装方式,这里不在赘述; # yum install java-1.8.0-openjdk 确认java环境已配置完成 # java -version openjdk

浅析MySQL中的Index Condition Pushdown (ICP 索引条件下推)和Multi-Range Read(MRR 索引多范围查找)查询优化

◇◆丶佛笑我妖孽 提交于 2020-02-26 06:51:41
本文出处: http://www.cnblogs.com/wy123/p/7374078.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他) ICP优化原理 Index Condition Pushdown (ICP),也称为索引条件下推,体现在执行计划的上是会出现Using index condition(Extra列,当然Extra列的信息太多了,只能做简单分析) ICP原理通俗讲就是,查询过程中,直接在查询引擎层的API获取数据的时候实现"非直接索引"过滤条件的筛选,而不是查询引擎层查询出来之后在Server层筛选。 换句话说就是ICP在获取数据的同时实现了where的次选条件中无法直接使用索引的情况下的筛选,避免了没有ICP优化的时候分两个步骤的实现(获取数据的过程没有做次选条件的过滤) 如果是非ICP优化查询的话,是两步,第一步是获取数据,第二步是获取的数据进行条件筛选。 显然,相比后者,前者可以一步实现索引的查找Seek+filter,效率上更高。 适应的场景: ICP的优化策略可用于range、ref、eq_ref、ref_or_null 类型的访问数据方法 其实没有实例不太好理解这种优化策略,还是举两个实际列子吧。 ICP优化实例 第一个例子在网上非常多,也非常容易理解

MySQL 执行计划中Extra(Using where,Using index,Using index condition,Using index,Using where)的浅析

北战南征 提交于 2020-02-26 06:49:57
关于如何理解MySQL执行计划中Extra列的Using where、Using Index、Using index condition,Using index,Using where这四者的区别。首先,我们来看看官方文档关于三者的简单介绍(官方文档并没有介绍Using index,Using where这种情况): Using index (JSON property: using_index) The column information is retrieved from the table using only information in the index tree without having to do an additional seek to read the actual row. This strategy can be used when the query uses only columns that are part of a single index. For InnoDB tables that have a user-defined clustered index, that index can be used even when Using index is absent from the Extra column. This is the