mysql执行计划

MYSQL优化

ぃ、小莉子 提交于 2020-01-12 17:02:42
优化目标 减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段。 降低 CPU 计算 除了 IO 瓶颈之外,SQL优化中需要考虑的就是 CPU 运算量的优化了。order by, group by,distinct … 都是消耗 CPU 的大户(这些操作基本上都是 CPU 处理内存中的数据比较运算)。当我们的 IO 优化做到一定阶段之后,降低 CPU 计算也就成为了我们 SQL 优化的重要目标 优化方法 改变 SQL 执行计划 明确了优化目标之后,我们需要确定达到我们目标的方法。对于 SQL 语句来说,达到上述2个目标的方法其实只有一个,那就是改变 SQL 的执行计划,让他尽量“少走弯路”,尽量通过各种“捷径”来找到我们需要的数据,以达到 “减少 IO 次数” 和 “降低 CPU 计算” 的目标 常见误区 count(1)和count(primary_key) 优于 count(*) 很多人为了统计记录条数,就使用 count(1) 和 count(primary_key) 而不是 count(*) ,他们认为这样性能更好,其实这是一个误区。对于有些场景,这样做可能性能会更差,应为数据库对 count(*)

MySQL执行计划extra中的using index 和 using where using index 的区别

南笙酒味 提交于 2020-01-12 15:53:23
本文出处: http://www.cnblogs.com/wy123/p/7366486.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他) mysql执行计划中的extra列中表明了执行计划的每一步中的实现细节,其中包含了与索引相关的一些细节信息 其中跟索引有关的using index 在不同的情况下会出现Using index, Using where Using index ,Using index condition等 那么Using index 和 Using where;Using index 有什么区别?网上搜了一大把文章,说实在话也没怎么弄懂,于是就自己动手试试。 本文仅从最简单的单表去测试using index 和 using where using index以及简单测试using index condition的情况的出现时机 。 执行计划的生成与表结构,表数据量,索引结构,统计信息等等上下文等多种环境有关,无法一概而论,复杂情况另论。 测试环境搭建   测试表以及测试数据搭建,类似于订单表和订单明细表,暂时先用订单表做测试   测试表结构 create table test_order ( id int auto_increment primary key, user_id

MySQl资料链接

你。 提交于 2020-01-12 14:40:47
原文:http://www.uml.org.cn/sjjm/sjjm-MySql.asp MySQl MySQL高可用数据库内核深度优化的四重定制 MySQL数据表存储引擎类型及特性 MySQL分布式数据库高可用架构、复制机制、多机房 Mysql高并发优化 我必须得告诉大家的MySQL优化原理 MySQL注入攻击与防御 腾讯云:MySQL数据库的高可用性分析 一步一步打造MySQL高可用平台 MySQL 日志管理详解 MySQL锁解决并发问题详解 MySQL的配置与管理 MySQL日志管理 MySQL 5.7新特性介绍 MySQL数据库读写分离中间件Atlas 京东MySQL数据库主从切换自动化 全面了解MySql中的事务 MySQL NULL值简介 MySQL备份的持续验证:还原备份 初识MySQL存储过程 优步工程团队对容器化MySQL的应用 MySQL NULL值简介 MySQL备份的持续验证:还原备份 MySQL SQL语句优化技巧 MySQL简单主从方案及暴露的问题 Uber为什么从Postgres迁移到MySQL 一种MySQL到HBase的迁移策略的研究与实现 MySQL 索引详解大全 MYSQL企业常用架构与调优经验分享 SQL优化之六脉神剑 MySQL 大表优化方案探讨 mysql 数据库引擎 MySQL数据库事务隔离级别 MySQL 用户权限详细汇总

mysql-查询性能优化

梦想的初衷 提交于 2020-01-11 22:42:12
1、不要取出全部列,取出全部列,会让优化器无法完成索引覆盖扫描这类优化,还会为服务器带来额外的I/O、内存和CPU的消耗。应该严格禁止SELECT * 的写法。MySQL使用如下三种方式应用WHERE条件,从好到坏依次为:   1.1 在索引中使用WHERE条件来过滤不匹配的记录。这是在存储引擎层完成的。   1.2 使用索引覆盖扫描(Extra列中出现了Using index)来返回记录,直接从索引中过滤不需要的记录并返回命中的结果。这是在MySQL服务器层完成的,但无须在回表查询记录。   1.3 从数据表中返回数据,然后过滤不满足条件的记录(在Extra列中出现Using Where)。这在MySQL服务器层完成,MySQL需要先从数据表独处记录然后过滤。 上面的例子说明了好的索引很重要。 2、如果发现查询需要扫描大量的数据但值返回少数的行,那么可以尝试下面的技巧优化它:   2.1 使用索引覆盖扫描,把所有需要用的列都放到索引中,这样存储引擎无须回表获取对应行就可以返回结果了。   2.2 改变库表结构。例如使用单独的汇总表。   2.3 重写这个复杂的查询,让MySQL优化器能够以更优化的方式执行这个查询。 重构查询:   1、一个复杂查询还是多个简单查询;   2、切分查询;   例如: DELECT FROM message WHERE created < DATE

MySQL 创建表

≯℡__Kan透↙ 提交于 2020-01-11 15:59:14
MySQL中create table语句的基本语法是: CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [select_statement] TEMPORARY:该关键字表示用MySQL create table新建的表为临时表,此表在当前会话结束后将自动消失。临时表主要被应用于存储过程中,对于目前尚不支持存储过程的MySQL,该关键字一般不用。 IF NOT EXISTS:实际上是在建表前加上一个判断,只有该表目前尚不存在时才执行create table操作。用此选项可以避免出现表已经存在无法再新建的错误。 tbl_name:你所要创建的表的表名。该表名必须符合标识符规则。通常的做法是在表名中仅使用字母、数字及下划线。例如titles、our_sales、my_user1等都应该算是比较规范的表名。 create_definition:这是MySQL create table语句中关键部分所在。在该部分具体定义了表中各列的属性。 create_definition的基本语句是: col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [PRIMARY KEY

Mysql中的锁机制详解

删除回忆录丶 提交于 2020-01-11 14:33:11
原文: MySQL中的锁(表锁、行锁,共享锁,排它锁,间隙锁) 作者: 唐大麦 锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中,除传统的 计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一 个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。本章我们着重讨论MySQL锁机制 的特点,常见的锁问题,以及解决MySQL锁问题的一些方法或建议。 Mysql用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。这些锁统称为悲观锁(Pessimistic Lock)。 MySQL锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最 显著的特点是不同的存储引擎支持不同的锁机制。比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);BDB存储引擎采用的是页面锁(page-level locking),但也支持表级锁;InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。 表级锁: 开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁: 开销大,加锁慢;会出现死锁

mysql之慢查询

二次信任 提交于 2020-01-11 04:18:55
分析MySQL语句查询性能的方法除了使用 EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定时间的语句,我们将超过指定时间的 SQL语句 查询称为“慢查询”。 含 义 超过指定时间的 SQL语句 查询 记录方法 开启“慢查询”记录功能等 记录办法 记录慢查询的方法: 查看/设置“慢查询”的时间定义 mysql> show variables like "long%"; +-----------------+----------+ | Variable_name | Value | +-----------------+----------+ | long_query_time | 0.000100 | +-----------------+----------+ 1 row in set (0.00 sec) 如上述语句输出,“慢查询”的时间定义为0.0001秒(方便测试,一般设置为1-10秒)。使用下面语句定义“慢查询”时间 mysql> set long_query_time=0.0001; Query OK, 0 rows affected (0.00 sec) 开启“慢查询”记录功能 mysql> show variables like "slow%"; +---------------------+-----------------------------

MySQL 创建表

两盒软妹~` 提交于 2020-01-11 03:03:16
MySQL中create table语句的基本语法是: CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [select_statement] TEMPORARY:该关键字表示用MySQL create table新建的表为临时表,此表在当前会话结束后将自动消失。临时表主要被应用于存储过程中,对于目前尚不支持存储过程的MySQL,该关键字一般不用。 IF NOT EXISTS:实际上是在建表前加上一个判断,只有该表目前尚不存在时才执行create table操作。用此选项可以避免出现表已经存在无法再新建的错误。 tbl_name:你所要创建的表的表名。该表名必须符合标识符规则。通常的做法是在表名中仅使用字母、数字及下划线。例如titles、our_sales、my_user1等都应该算是比较规范的表名。 create_definition:这是MySQL create table语句中关键部分所在。在该部分具体定义了表中各列的属性。 create_definition的基本语句是: col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [PRIMARY KEY

Mysql之EXPLAIN关键字学习笔记

别来无恙 提交于 2020-01-11 00:29:11
Mysql的增删改查我想学过Mysql的人都知道怎么用吧!但是作为一个后端开发人员,只会CRUD是往往不够的,我们在CRUD的同时也需要掌握一些数据库性能优化,这样我们才能提高我们系统的性能。今天介绍 EXPLAIN 字段,这个字段可以让我们很清楚地了解Mysql执行SQL语句的过程,以此来判断我们的SQL语句是否需要优化 EXPLAIN介绍 EXPLAIN是什么?   使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道Mysql是如何处理你的SQL语句的。分析你的查询与或是表结构的性能瓶颈。 EXPLAIN的如何使用? EXPLAIN的用法比较简单,只要要查询语句前面加上EXPLAIN即可 1 explain select * from tbl_emp; 运行结果如下 现在也许我们还不知道这些字段是什么意思,下面我们将围绕着这些字段进行展开讲解。 id 介绍   select查询的序列号,包含一组数字,表示查询中执行select字句或操作表的顺序。 其中id的取值分为三种情况: id相同,执行顺序由上往下 id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行 id相同不同,同时存在 下面我们来看看这三种情况到底是怎样的情况 id相同,执行顺序由上往下 id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行 id相同不同

MySQL全量、增量备份与恢复

我只是一个虾纸丫 提交于 2020-01-10 21:55:48
数据备份的重要性 在生产环境中,数据的安全性是至关重要的,任何数据的丢失都可能产生严重的后果 造成数据丢失的原因 1.程序错误 2.人为错误 3.计算机失败 4.磁盘失败 5.zai难和偷窃 数据库备份的分类 物理备份: 对数据库操作系统的物理文件(如数据文件、日志文件等)的备份 物理备份又可分为脱机备份(冷备份)和联机备份(热备份) -冷备份:是在关闭数据库的时候进行的 -热备份:数据库处于运行状态,这种备份方法依赖于数据库的日志文件 逻辑备份:对数据库组件(如表等数据库对象)的备份 表:表的结构文件(FRM)、数据文件(MYD)、索引文件(MYI) 从数据库的备份策略角度,备份可分为 1.完全备份 每次对数据进行完整的备份 完全备份:会把服务器内的所有数据全部备份,每次都这么执行 优点:安全 缺点:数据备份冗余,占用磁盘空间 2.差异备份 备份那些自从上次完全备份之后被修改过的文件 前提是必须要备份一次完全备份,接下来每次只备份基于完全备份的基础上被修改过的文件 3.增量备份 只有那些在上次完全备份或者增量备份后被修改的文件才会被备份 差异备份与增量备份比较: 相同点:基础都是完全备份 不同点:差异备份只参考基础的完全备份, 增量备份是参考上一次的数据备份与当前状态进行对比,备份被修改的文件 增量备份效率更高,空间利用率很高,但是在安全性能不高 mysql完全备份