mysql执行计划

MySQL架构

帅比萌擦擦* 提交于 2019-12-05 03:01:41
一、MySQL架构 第一层,即最上一层 ,所包含的服务并不是MySQL所独有的技术。它们都是服务于C/S程序或者是这些程序所需要的 :连接处理,身份验证,安全性等等。 第二层值得关注 。这是MySQL的核心部分。通常叫做 SQL Layer。在 MySQL据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断, sql解析,行计划优化, query cache 的处理以及所有内置的函数(如日期,时间,数学运算,加密)等等。各个存储引擎提供的功能都集中在这一层,如存储过程,触发器,视 图等。 第三层包括了存储引擎 。通常叫做StorEngine Layer ,也就是底层数据存取操作实现部分,由多种存储引擎共同组成。它们负责存储和获取所有存储在MySQL中的数据。就像Linux众多的文件系统 一样。每个存储引擎都有自己的优点和缺陷。服务器是通过存储引擎API来与它们交互的。这个接口隐藏 了各个存储引擎不同的地方。对于查询层尽可能的透明。这个API包含了很多底层的操作。如开始一个事 物,或者取出有特定主键的行。存储引擎不能解析SQL,互相之间也不能通信。仅仅是简单的响应服务器 的请求。 连接管理和安全 在服务器内部,每个client连接都有自己的线程。这个连接的查询都在一个单独的线程中执行。这些线程轮流运行在某一个CPU内核(多核CPU)或者CPU中。服务器缓存了线程

mysql 慢查询

血红的双手。 提交于 2019-12-05 01:54:24
--- 如下为mysql 慢查询查看方案 -- 1)select db, query_TIME, lock_time, rows_examined, sql_text from mysql.slow_log 2)查看执行计划: 根据SQL_text字段执行 Explain sql_test ; 如果 possible_keys为null ,则为全表扫描。 注意: 后续每次测试开始之前 需要提前清空slow_log表. 语句: Truncate table mysql.slow_log; 来源: https://www.cnblogs.com/wenjing2019/p/11896168.html

oralce与mysql的区别

大城市里の小女人 提交于 2019-12-04 23:38:42
1. 有些人说Oracle没有限制,实际上他们说得可能是Oracle不支持LIMIT语法.不过可以rownum虚列来实现,不过会更加麻烦.   2. Oracle不支持偏移(offset)语法. 3. Oracle的复制功能可能比MySQL更加健壮,不过也更加难以配置.   4. 对于多个Master类型的系统,大部分用户都希望你使用更加复杂也更加昂贵的Oracle RAC(虽然可能NDB更加健壮).   5. Oracle的分区功能非常健壮,但是它不是内置的,并需要专门为此付费(分区功能是在Enterprise Edition里面是内置的).   6. 在Linux/Unix上,Oracle并不象Mysql那么方便,很多Linux/Unix发行版默认就会自带Mysql.(我对这一点的理解与翻译可能都有偏差)   7. INSERT … ON DUPLICATE KEY UPDATE语法将不再可用,不过你需要学习更加复杂(但是符合SQL标准)的MERGE语法.   8. Oracle的ROLE架构与MySQL有很大差异,无法再使用root角色来完整所有工作.(不过Sys用户的权限仍然与root相差无几,只是为了安全着想,不建议这么使用了).   9. Role 帐户与特定的Schema联系在一起(反之也一样),类似于MySQL数据库中的Database概念.

MySQL InnoDB 锁

ぃ、小莉子 提交于 2019-12-04 21:12:01
MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 MySQL InnoDB 锁 MySQL InnoDB MVCC MySQL InnoDB 实现高并发原理 MySQL InnoDB 快照读在RR和RC下有何差异 数据准备: /* SQLyog Ultimate v12.09 (64 bit) MySQL - 5.6.17 : Database - test ********************************************************************* */ /*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=''*/; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE

java面试(一)Mysql优化

*爱你&永不变心* 提交于 2019-12-04 18:55:14
一、常用mysql知识 (一)查询语句优化 1.避免非操作符的使用,NOT、<>数据库系统不会使用索引。 2.避免对查询的列的操作,任何对列操作都可能导致全表扫描,包括数据库函数、技术表达式等。尽可能将操作移至等式右边 3.避免不必要的类型转换 4.增加查询的范围限制 5.合理使用IN和EXIST 6.尽量去掉<> 7.去掉WHERE字句中的IS NULL和IS NOT NULL,不会使用索引而进行全表搜索。 8.尽量不要使用前导模糊查询,前导模糊查询不能利用索引。 9.SELECT字句中避免使用‘*’ 10.规范所有的SQL关键之的书写,不要大小写混用 (二) exists与in    1.区别:in是把外表和内表作为hash连接,而exist是对外表做loop循环,每次loop循环再对内表进行查询。如果两个表大小相当,in或exists都可以,如果一大一小,子查询大表用exists,子查询小表用in    2.not in 与not exist:如查询语句使用了not in那么内外表都进行全表扫描,没用到索引,而not exists子查询依然能用到表上索引,所以无论哪个表大,用not exists都比not in要快。 (三) 事物隔离级别 1) 幻读    事物1读取一条指定where数据之后,事物2插入一条符合where条件的数据,事物1使用相同条件再次查询

MySQL架构

感情迁移 提交于 2019-12-04 18:41:29
目录 MySQL架构 一、MySQL架构 二、连接器 三、查询缓存 四、分析器 五、优化器 MySQL架构 一、MySQL架构 连接器——管理连接、权限认证 分析器——词法分析、语法分析(AST)抽象语法树 优化器——执行计划、索引选择 执行器——操作引擎、返回结果 存储引擎——存储数据,提供读写接口 8.0版本之后,舍弃了查询缓存功能 二、连接器 连接器负责跟客户端建立连接,以获得权限、维持和管理连接 用户名密码验证 查询权限信息、分配对应权限 可以使用show processlist查看现在连接 如果太长时间没有动静,就会自动断开,通过wait_timeout控制,默认8小时 连接分类: 长连接:建议 短连接 三、查询缓存 查询语句的时候,先去查询缓存查看结果,8.0后没有这个组件 不推荐理由: 查询缓存失效比较频繁,只要表更新,缓存就会清空 缓存对应更新数据命中率比较低 四、分析器 词法分析:MySQL需要把输入字符串进行识别 语法分析:根据语法规则判断SQL是否满足mysql的语法,如果不符合就会报错“You have an error in your SQL synta” 五、优化器 在具体执行SQL语句之前要经过优化器进行处理 当表中有多个索引,决定使用哪个索引 当需要多表关联,决定表的连接顺序...等 不同的执行方式对SQL语句执行效率影响很大 CBO(Cost

MySQL 5.7.9 GA稳定版新特性解读

久未见 提交于 2019-12-04 13:16:50
2015年10月22日,MySQL发布5.7.9稳定版,虽然MySQL官方手册里已经有很多关于MySQL 5.7新特性的介绍,在这里,还是 让我们一起看看在MySQL 5.7里有哪些值得我们关注的新特性吧。 1、安全性 用户表 mysql .user的plugin字段不允许为空,默认值是mysql_native_password,而不是mysql_old_password,不再支持旧密码格式; 增加密码过期机制,过期后需要修改密码,否则可能会被禁用,或者进入沙箱模式; 使用mysql_install_db初始化时,默认会自动生成随机密码,并保存到/var/log/mysqld.log中(grep 'temporary password' /var/log/mysqld.log),而且不创建除root @localhost 外的其他账号,也不创建test库; 在5.7中,推荐使用mysqld --initialize对数据库进行初始化,在初始化时如果加上–initial-insecure,则会创建空密码的 root @localhost 账号,否则会创建带密码的 root @localhost 账号,密码直接写在 log-error 日志文件中(在5.6中是放在~/.mysql_secret里);在5.7中可以对普通用户进行unlock及lock操作。 2

MySQL性能分析之Explain

强颜欢笑 提交于 2019-12-04 09:30:22
MySQL性能分析之Explain Explain基础 关于explain命令相信大家并不陌生,具体用法和字段含义可以 参考官网 ,这里需要强调rows是核心指标,绝大部分rows小的语句执行一定很快(有例外,下面会讲到)。所以优化语句基本上都是在优化rows。 执行计划:让mysql预估执行操作(一般正确) all < index < range < index_merge < ref_or_null < ref < eq_ref < system/constid,email 慢: select * from userinfo3 where name='nick' explain select * from userinfo3 where name='nick' type: ALL(全表扫描) select * from userinfo3 limit 1; 快: select * from userinfo3 where email='nick' type: const(走索引) Explain进阶 Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。 Explain语法: explain select … from …

MySQL 数据库性能优化之SQL优化【转】

自作多情 提交于 2019-12-04 07:52:14
优化目标 减少 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 语句执行过程详解

纵然是瞬间 提交于 2019-12-04 05:34:48
MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 MySQL InnoDB 锁 MySQL InnoDB MVCC MySQL InnoDB 实现高并发原理 MySQL InnoDB 快照读在RR和RC下有何差异 当客户端向 MySQL 发送一个请求的时候,MySQL 的执行过程如下图所示: MySQL 客户端/服务端通信 通信机制 MySQL 客户端与服务端的通信方式是 “ 半双工 ”。 全双工:双向通信,发送同时也可以接收 半双工:双向通信,同时只能接收或者是发送,无法同时做操作 单工:只能单一方向传送 一旦一端开始发送消息,另一端要接收完整个消息才能响应它,所以我们无法也无须将一个消息切成小块独立发送,也没有办法进行流量控制。 客户端用一个单独的数据包将查询请求发送给服务器,所以当查询语句很长的时候,需要设置 max_allowed_packet 参数。 但是需要注意的是,如果查询实在是太大,服务端会拒绝接收更多数据并抛出异常。 与之相反的是,服务器响应给用户的数据通常会很多,由多个数据包组成。但是当服务器响应客户端请求时,客户端必须完整的接收整个返回结果,而不能简单的只取前面几条结果,然后让服务器停止发送。 因而在实际开发中