mysql执行计划

MySQL全量、增量备份与恢复 (理论+实践篇)

女生的网名这么多〃 提交于 2019-12-13 08:46:20
数据备份的中要性 在生产环境中,数据的安全性是至关重要的,任何数据的丢失都可能产生严重的后果 造成数据丢失的原因 程序错误 人为错误 计算机失败 磁盘失败 灾难(如起火、地震)和偷窃 数据库备份的分类 从物理与逻辑的角度,备份可分为 物理备份:对数据库操作系统的物理文件(如数据文件、日志文件等)的备份 物理备份又可以分为脱机备份(冷备份)和联机备份(热备份) 冷备份:是关闭数据库的时候进行的 热备份:数据库处于运行状态,这种备份方法依赖于数据库的日志文件 逻辑备份:对数据库逻辑组件(如表等数据库对象)的备份 从数据库的备份策略角度,备份可分为 完全备份:每次对数据进行完整的备份 差异备份:备份那些自从上次完全备份之后被修改过的文件 增量备份:只有那些在上次完全备份或者增量备份后修改的文件才会被备份 MySQL完全备份 完全备份是对整个数据库的备份、数据库结构和文件结构的备份 完全备份保存的是备份完成时刻的数据库 完全备份是增量备份的基础 完全备份的优点 备份与恢复操作简单方便 完全备份的缺点 数据存在大量的重复 占用大量的备份空间 备份与恢复时间长 mysqldump备份数据库 MySQL数据库的备份可以采用多种方式 直接打包数据库文件夹,如/usr/local/mysql/data 使用专用备份工具 mysqldump mysqldump命令 MySQL自带的备份工具

高性能MySQL--总览篇

有些话、适合烂在心里 提交于 2019-12-13 01:00:42
文章为转载: MySQL逻辑架构及性能优化原理   说起MySQL的查询优化,相信所有人都了解一些最简单的技巧:不能使用SELECT *、不使用NULL字段、合理创建索引、为字段选择合适的数据类型….. 你是否真的理解这些优化技巧?是否理解其背后的工作原理?在实际场景下性能真有提升吗?我想未必。因而理解这些优化建议背后的原理就尤为重要。 MySQL逻辑架构   如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器。下图展示了MySQL的逻辑架构图。   MySQL逻辑架构整体分为三层,最上层为客户端层,并非MySQL所独有,诸如:连接处理、授权认证、安全等功能均在这一层处理。   MySQL大多数核心服务均在中间这一层,包括查询解析、分析、优化、缓存、内置函数(比如:时间、数学、加密等函数)。所有的跨存储引擎的功能也在这一层实现:存储过程、触发器、视图等。   最下层为存储引擎,其负责MySQL中的数据存储和提取。和Linux下的文件系统类似,每种存储引擎都有其优势和劣势。中间的服务层通过API与存储引擎通信,这些API接口屏蔽了不同存储引擎间的差异。       每一个客户端发起一个新的请求都由服务器端的连接/线程处理工具负责接收客户端的请求并开辟一个新的内存空间,在服务器端的内存中生成一个新的线程

MySQL Explain命令详解

廉价感情. 提交于 2019-12-12 04:32:31
一、EXPLAIN命令介绍 MySQL EXPLAIN命令是查询性能优化不可缺少的一部分,同时EXPLAIN 命令用法十分简单, 在 SELECT 语句前加上 Explain 就可以了 mysql > EXPLAIN SELECT a , b FROM t WHERE a = '100' ; + ----+-------------+-------+------------+------+---------------+--------+---------+-------+------+----------+-------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | + ----+-------------+-------+------------+------+---------------+--------+---------+-------+------+----------+-------------+ | 1 | SIMPLE | t | NULL | ref | ID_key | ID_key | 35 | const | 3 | 100 | Using index | + -

MySQL简介

回眸只為那壹抹淺笑 提交于 2019-12-11 19:29:35
一、MySQL简介 1、数据库管理软件分类 主要分为关系型和非关系型。 可以简单的理解为,关系型数据库需要有表结构,非关系型数据库是key-value存储的,没有表结构。 关系型:如sqllite,db2,oracle,access,sql server, MySQL ,注意:sql语句通用。 非关系型:mongodb,redis,memcache 2、MySQL MySQL是一个关系型 数据库管理系统 ,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (关系数据库管理系统) 应用软件。 MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是 开放源码 这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。 MySQL为我们提供开源的安装在各个操作系统上的安装包,包括mac,linux,windows。 二、存储引擎(也称作表类型) MySQL中的数据用各种不同的技术存储在文件(或者内存)中。每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能

mysql order by limit 的一个坑

醉酒当歌 提交于 2019-12-11 17:16:34
分页查询的时候遇到的坑: 发现的问题: 对单个无索引的字段进行排序后limit .发现当被排序字段有相同值时并且在limit范围内,取的值并不是正常排序后的值, 也就是说,当排在第N行的数据可取key1、 key2 时 , 排序结果可能是key1,也可能是key2。 排序+ limit 结果 (排序键无索引) 按cnt取key_word分别前三结果: 解决: 先上个链接! https://dev.mysql.com/doc/refman/5.7/en/limit-optimization.html 这是mysql对limit的优化。 原文: If multiple rows have identical values in the ORDER BY columns, the server is free to return those rows in any order, and may do so differently depending on the overall execution plan. In other words, the sort order of those rows is nondeterministic with respect to the nonordered columns. 是说如果order by的列有相同的值时, mysql会随机选取这些行

# 第二章--MYSQL体系结构和管理

空扰寡人 提交于 2019-12-11 17:06:45
一、体系结构 MySQL C/S模型 Server : mysqld Client : socket:仅本地连接使用 tcp/ip:应用连接使用(远程和本地) #TCP/IP方式(远程、本地) mysql -uroot -p123456 -h 10.0.0.51 -P3306 #socket方式(仅本地) mysql -uroot -p123456 -S /tmp/mysql.sock 实例介绍 实例=mysqld --- > master thread ---> 干活的线程 + 预分配的内存结构 公司=boss 经理 员工 办公室 实例=mysqld+master thread + N thread + 内存区域 mysqld程序运行原理 mysqld程序结构 ( SQL语句的执行个过程 连接层 (1)提供连接协议:TCP/IP 、SOCKET (2)提供验证:user、password,IP,SOCKET (3)提供专用连接线程:接收用户SQL,返回结果 通过以下语句可以查看到连接线程基本情况 mysql> show processlist; SQL层 (1)接收上层传送的SQL语句 (2)语法验证模块:验证语句语法,是否满足SQL_MODE (3)语义检查:判断SQL语句的类型 (4)权限检查:用户对库表有没有权限 (5)解析器:对语句执行前,进行预处理,生成解析树(执行计划

技术分享 | MySQL优化:为什么SQL走索引还那么慢?

让人想犯罪 __ 提交于 2019-12-11 16:24:58
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 作者:胡呈清 背景 2019-01-11 9:00-10:00 一个 MySQL 数据库把 CPU 打满了。 硬件配置:256G 内存,48 core 分析过程 接手这个问题时现场已经不在了,信息有限,所以我们先从监控系统中查看一下当时的状态。从 PMM 监控来看,这个 MySQL 实例每天上午九点 CPU 都会升高到 10%-20%,只有 1 月 2 号 和 1 月 11 号 CPU 达到 100%,也就是今天的故障。怀疑是业务在九点会有压力下发,排查方向是慢查询。 按执行次数统计 slow log 发现次数最多的一条 sql: mysqldumpslow -s c slow.log > /tmp/slow_report.txt Count: 3276 Time=21.75s (71261s) Lock=0.00s (1s) Rows=0.9 (2785), xxx SELECT T.TASK_ID, T.xx, T.xx, ... FROM T_xx_TASK T WHERE N=N AND T.STATUS IN (N,N,N) AND IFNULL(T.MAX_OPEN_TIMES,N) > IFNULL(T.OPEN_TIMES,N) AND (T.CLOSE_DATE IS NULL OR T

MySql的执行计划

£可爱£侵袭症+ 提交于 2019-12-11 02:35:15
一。什么是数据库执行计划: MySQL执行计划是sql语句经过查询优化器后,查询优化器会根据用户的sql语句所包含的字段和内容数量等统计信息,选择出一个执行效率最优(MySQL系统认为最优)的执行计划,然后根据执行计划,调用存储引擎提供的接口,获取数据。执行计划,简单的来说,是SQL在数据库中执行时的表现情况,通常用于SQL性能分析,优化等场景。 二。执行计划的查看方法:   使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈。 explain select …………….(在相应的select前面加explain即可) 三。执行计划的查看:   执行计划包含的信息      (1).id   含义,指示select字句或操作表的顺序。   eg1:id相同,执行顺序从上到下,下面的执行计划表示,先操作t1表,然后操作t2表,最后操作t3表。      eg2:若存在子查询,则子查询(内层查询)id大于父查询(外层查询),先执行子查询。id越大,优先级越高。      (2).select_type   含义:select语句的类型,主要是用于区分普通查询、联合查询、子查询等复杂的查询 1、SIMPLE:简单的select查询,查询中不包含子查询或者union 2、PRIMARY

关系型数据库——MySQL

感情迁移 提交于 2019-12-11 01:12:23
【MySQL架构图】 MySQL简要架构图如下图所示,引擎层以插件方式集成了不同的存储引擎,它们共用Server层对外提供服务。    连接器:用于连接管理,进行身份认证及权限相关的管理。(登录MySQL) 查询缓存区:执行查询语句时,先从缓存区查询。(该功能V8.0之后移除) 分析器:未命中缓存时,对SQL进行词法分析、语法分析。 优化器:按照MySQL认为的最优方案,生成执行计划。 执行器:执行SQL,并从存储引擎返回数据。 存储引擎:存储数据,提供读写接口 【MySQL存储引擎】 V5.5之前MySQL的默认存储引擎为MyISAM(ISAM:Indexed Sequential Access Method,即有索引的顺序访问方法。MyISAM是基于传统的ISAM优化而来) V5.5之后,MySQL的默认存储引擎便更改为InnoDB,主要是为支持数据库事务安全而设计。 # MyISAM vs InnoDB 锁:MyISAM支持表级锁;InnoDB支持行级锁(默认)。因此并发操作时,InnoDB的效率要更高。 性能:MyISAM执行大量select和insert操作时,效率更高;InnoDB执行大量update和insert操作时,效率更高。 外键:MyISAM不支持;InnoDB支持外键。 事务:MyISAM不支持事务操作;InnoDB支持数据库事务。 崩溃后安全恢复

MySQL 执行计划详解

 ̄綄美尐妖づ 提交于 2019-12-11 00:55:26
MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 MySQL InnoDB 锁 MySQL InnoDB MVCC MySQL InnoDB 实现高并发原理 MySQL InnoDB 快照读在RR和RC下有何差异 我们经常使用 MySQL 的执行计划来查看 SQL 语句的执行效率,接下来分析执行计划的各个显示内容。 EXPLAIN SELECT * FROM users WHERE id IN (SELECT userID FROMuser_address WHERE address = "湖南长沙麓谷") ; 执行计划的 id select 查询的序列号,标识执行的顺序 id 相同,执行顺序由上至下 id 不同,如果是子查询,id 的序号会递增,id 值越大优先级越高,越先被执行 执行计划的 select_type 查询的类型,主要是用于区分普通查询、联合查询、子查询等。 SIMPLE :简单的 select 查询,查询中不包含子查询或者 union PRIMARY :查询中包含子部分,最外层查询则被标记为 primary SUBQUERY/MATERIALIZED :SUBQUERY 表示在 select 或 where