From 8e92b288e8f5d23cb2797914d48901930d434203 Mon Sep 17 00:00:00 2001 From: qiurunze123 Date: Sun, 13 Jan 2019 22:11:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4mysql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++-- docs/mysql-2.md | 110 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+), 4 deletions(-) create mode 100644 docs/mysql-2.md diff --git a/README.md b/README.md index 398792c..e05e853 100644 --- a/README.md +++ b/README.md @@ -89,10 +89,10 @@ -------------------------------------------------| #### [mysql数据库优化及架构学习](/docs/mysql.md) ##### [mysql数据库设计规范](/docs/mysql.md) -##### [mysql数据库设计实例](/docs/mysql.md) -##### [mysql数据库执行计划分析](/docs/mysql.md) -##### [mysql数据库备份和恢复](/docs/mysql.md) -##### [mysql数据库架构变迁](/docs/mysql.md) +##### [mysql数据库设计实例](/docs/mysql-1.md) +##### [mysql数据库执行计划分析](/docs/mysql-2.md) +##### [mysql数据库备份和恢复](/docs/mysql-3.md) +##### [mysql数据库架构变迁](/docs/mysql-4.md) --------------------------------------------------| #### [netty专题(已更新 by liuxiangyu)](/docs/netty.md) #### [linux专题](/docs/linux.md) diff --git a/docs/mysql-2.md b/docs/mysql-2.md new file mode 100644 index 0000000..50187c9 --- /dev/null +++ b/docs/mysql-2.md @@ -0,0 +1,110 @@ +### mysql数据库设计与优化与架构 模拟场景(京东商城) + + 任何优化多需要场景,本次所有的场景为京东商城的数据库设计模拟! + 有问题或者宝贵意见联系我的QQ,非常希望你的加入! + +##简介: + + 设计: + 1.常见业务处理 + 2.执行计划分析 + 3.如何优化分页查询示例 + 4.如何删除重复数据示例 + 5.如何进行分区间数据统计显示 + 6.捕获有问题的sql慢查日志 + +**执行计划能够告诉我们什么** + + 1.sql如何使用索引 + 2.链接查询的执行顺序 + 3.查询扫描数据行数 + +**执行计划内容** + +![整体流程](https://raw.githubusercontent.com/qiurunze123/imageall/master/mysql1.png) + + ID列:数据为一组数字表示执行select语句的顺序 + id值相同的时候执行顺数由上至下 + id值越大优先级越高,越先被执行 + ID列中的如果数据为一组数字,表示执行SELECT语句的顺序;如果为NULL,则说明这一行数据是由另外两个SQL语句进行 UNION操作后产生的结果集 + + SELECT_TYPE |_ SIMPLE不包含子查询或者是UNION操作的查询 + |_ PRIMARY 查询中如果包含任何子查询,那么最外层的查询则被标记为 PRIMARY + |_ SUBQUERY select 列表中的子查询 + |_ DEPENDENT 依赖外部结果的子查询 + |_ SUBQUERY 依赖外部结果的子查询 + |_ UNION Union操作的第二个或是之后的查询的值为union + |_ DEPENDENT UNION 当UNION作为子查询时,第二或是第二个后的查询的select_type值 + |_ UNION RESULT UNION产生的结果集 + |_ DERIVED 出现在FROM子句中的子查询 + + TABLE |_ 所在表的名称,如果表取了别名,则显示的是别名 + |_ : 由ID为M,N查询union产生的结果集 + |_ / :由ID为N的查询产生的结果 + + PARTITIONS 分区表 + 查询匹配的记录来自哪一个分区 + 对于分区表,显示查询的分区ID + 对于非分区表,显示为NULL + + TYPE列 + |_ system 这是const联接类型的一个特例,当查询的表只有一行时使用 + |_ const 表中有且只有一个匹配的行时使用,如对主键或是唯一索引的查询,这是效率最高的联接方式 + |_ eq_ref 唯一索引或主键索引查询,对应每个索引键,表中只有一条记录与之匹配 + |_ ref 非唯一索引查找,返回匹配某个单独值的所有行 + |_ ref_or_null 类似于ref类型的查询,但是附加了对NULL值列的查询 + |_ index_merge 该联接类型表示使用了索引合并优化方法 + |_ range 索引范围扫描,常见于between、>、<这样的查询条件 + |_ index FULL index Scan 全索引扫描,同ALL的区别是,遍历的是索引树 + |_ ALL FULL TABLE Scan 全表扫描,这是效率最差的联接方式 + + Extra列 + |_ Distinct 优化distinct操作,在找到第一个匹配的元素后即停止查找 + |_ Not exists 使用not exists来优化查询 + |_ Using filesort 使用额外操作进行排序,通常会出现在order by或group by查询中 + |_ Using index 使用了覆盖索引进行查询 + |_ Using temporary MySQL需要使用临时表来处理查询,常见于排序,子查询,和分组查询 + |_ Using where 需要在MySQL服务器层使用WHERE条件来过滤数据 + |_ select tables optimized away 直接通过索引来获得数据,不用访问表,这种情况通常效率是最高的 + + POSSIBLE_KEYS列 + |_ 指出MySQL能使用哪些索引来优化查询 + |_ 查询列所涉及到的列上的索引都会被列出,但不一定会被使用 + + KEY列 + |_查询优化器优化查询实际所使用的索引 + |_如果表中没有可用的索引,则显示为NULL + |_如果查询使用了覆盖索引,则该索引仅出现在Key列中 + + KEY_LEN列 + |_ 显示MySQL索引所使用的字节数,在联合索引中如果有3列,假如3列字段总长度为100个字节 + Key_len显示的可能会小于100字节,比如30字节 + 这就说明在查询过程中没有使用到联合索引的所有列,只是利用到了前面的一列或2列 + |_ 表示索引字段的最大可能长度 + |_ Key_len的长度由字段定义计算而来,并非数据的实际长度 + + Ref列 + |_ 表示当前表在利用Key列记录中的索引进行查询时所用到的列或常量 + |_ + |_ + + rows列 + + |_ 表示MySQL通过索引的统计信息,估算出来的所需读取的行数(关联查询时,显示的是每次嵌套查询时所需要的行数 + |_ Rows值的大小是个统计抽样结果,并不十分准确 + + Filtered列 + |_ 表示返回结果的行数占需读取行数的百分比 + |_ Filtered列的值越大越好(值越大,表明实际读取的行数与所需要返回的行数越接近) + |_ Filtered列的值依赖统计信息,所以同样也不是十分准确,只是一个参考值 + + 执行计划的限制 + |_ 无法展示存储过程,触发器,UDF对查询的影响 + |_ 无法使用EXPLAIN对存储过程进行分析 + |_ 早期版本的MySQL只支持对SELECT语句进行分析 + + ---------------------------------------------------- + 如何删除重复数据 + 删除评论表中的对同一个商品的重复评论,只保留最早的一条 + + \ No newline at end of file