mysql执行计划

MySQL 规范

微笑、不失礼 提交于 2019-11-26 17:34:21
文章目录 数据库命令规范 数据库基本设计规范 数据库字段设计规范 索引设计规范 常见索引列建议 如何选择索引列的顺序 避免建立冗余索引和重复索引 优先考虑覆盖索引 索引SET规范 数据库SQL开发规范 数据库操作行为规范 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份表必须以bak_为前缀并以日期(时间戳)为后缀 所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换,会造成列上的索引失效,导致查询效率降低) 数据库基本设计规范 1、所有表必须使用Innodb存储引擎 没有特殊要求(即Innodb无法满足的功能如:列存储,存储空间数据等)的情况下,所有表必须使用Innodb存储引擎(mysql5.5之前默认使用Myisam,5.6以后默认的为Innodb)Innodb 支持事务,支持行级锁,更好的恢复性,高并发下性能更好 2、数据库和表的字符集统一使用UTF8MB4 兼容性更好,统一字符集可以避免由于字符集转换产生的乱码,不同的字符集进行比较前需要进行转换会造成索引失效 3、所有表和字段都需要添加注释

MySQL-4- 索引及执行计划

梦想与她 提交于 2019-11-26 17:27:08
1. 索引作用 提供了类似于书中目录的作用,目的是为了优化查询 2. 索引的种类(算法) B树索引 Hash索引 R树 Full text GIS 3. B树 基于不同的查找算法分类介绍 B-tree B+Tree 在范围查询方面提供了更好的性能(> < >= <= like) B*Tree 4. 在功能上的分类 4.1 辅助索引(S)怎么构建B树结构的? (1). 索引是基于表中,列(索引键)的值生成的B树结构 (2). 首先提取此列所有的值,进行自动排序 (3). 将排好序的值,均匀的分布到索引树的叶子节点中(16K) (4). 然后生成此索引键值所对应得后端数据页的指针 (5). 生成枝节点和根节点,根据数据量级和索引键长度,生成合适的索引树高度 id name age gender select * from t1 where id=10; 问题: 基于索引键做where查询,对于id列是顺序IO,但是对于其他列的查询,可能是随机IO. 4.2 聚集索引(C) 4.2.1 前提 (1)表中设置了主键,主键列就会自动被作为聚集索引. (2)如果没有主键,会选择唯一键作为聚集索引. (3)聚集索引必须在建表时才有意义,一般是表的无关列(ID) 4.2.2 辅助索引(S)怎么构建B树结构的? (1) 在建表时,设置了主键列(ID) (2) 在将来录入数据时

MySQL的explain中的参数

南楼画角 提交于 2019-11-26 16:49:27
1、id 每个被独立执行的操作的标识,表示对象被操作的顺序;id值大,先被执行;如果相同,执行顺序从上到下。 若没有子查询和联合查询,id则都是1。Mysql会按照id从大到小的顺序执行query,在id相同的情况下,则从上到下执行。 2、select_type 查询中每个select子句的类型 (1)SIMPLE (2)PRIMARY/UNION (3)DEPENDENT UNION/UNIOIN RESULT (4)SUBQUERY/DEPENDENT SUBQUERY (5)DERIVED/MATERIALIZED (6)UNCACHEABLE SUBQUERY/UNCACHEABLE UNION 3、table 名字,被操作的对象名称,通常是表名,或者表的别名,或者一个为查询产生临时表的标示符(如派生表、子查询、集合)。 4、type 代表查询执行计划中表使用的连接方式。 连接操作类型及级别: system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL 一般来说,得保证查询至少达到range级别,最好能达到ref。 5、partitions 匹配的分区信息(对于非分区表值为NULL)。

MySQL优化概述

淺唱寂寞╮ 提交于 2019-11-26 16:43:00
MySQL优化概述 MySQL数据库常见的两个瓶颈是:CPU和I/O的瓶颈。 CPU在饱和的时候一般发生在 数据装入内存或从磁盘上读取数据时候 。 磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应用分布在网络上, 那么查询量相当大的时候那么平瓶颈就会出现在网络上。 我们可以用mpstat, iostat, sar和vmstat来查看系统的性能状态。除了服务器硬件的性能瓶颈,对于MySQL系统本身,我们可以使用工具来优化数据库的性能。 MySQL优化方案 Mysql的优化,大体可以分为三部分:索引的优化,sql语句的优化,表的优化 索引优化 1.索引 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的也是最容易出现问题的,还是一些复杂的查询操作,因此对查询语句的优化是重中之重, 加速查询最好的方法就是索引。 索引:简单的说,相当于图书的目录,可以帮助用户快速的找到需要的内容。 在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。能够大大提高查询效率。特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍。 总结:索引的目的在于提高查询效率,与我们查询图书所用的目录是一个道理:先定位到章,然后定位到该章下的一个小结,然后找到页数。相似的例子还有:查字典,查地图等。 2

MySQL中一条SQL的加锁分析

依然范特西╮ 提交于 2019-11-26 16:26:55
MySQL中一条SQL的加锁分析 id主键 + RC id唯一索引 + RC id非唯一索引 + RC id无索引 + RC id主键 + RR id唯一索引 + RR id非唯一索引 + RR id无索引 + RR Serializable 一条复杂的SQL 死锁原理与分析 SQL1: select * from t1 where id = 10;(不加锁。因为MySQL是使用多版本并发控制的,读不加锁。) SQL2: delete from t1 where id = 10;(需根据多种情况进行分析) 假设t1表上有索引,执行计划一定会选择使用索引进行过滤 (索引扫描),根据以下组合,来进行分析。 组合一 : id列是主键,RC隔离级别 组合二 : id列是二级唯一索引,RC隔离级别 组合三 : id列是二级非唯一索引,RC隔离级别 组合四 : id列上没有索引,RC隔离级别 组合五 : id列是主键,RR隔离级别 组合六 : id列是二级唯一索引,RR隔离级别 组合七 : id列是二级非唯一索引,RR隔离级别 组合八 : id列上没有索引,RR隔离级别 组合九 : Serializable隔离级别 注:在前面八种组合下,也就是RC,RR隔离级别下,SQL1:select操作均不加锁,采用的是快照读,因此在下面的讨论中就忽略了,主要讨论SQL2:delete操作的加锁。 1.

【MySQL】索引相关 -- 2019-08-09 10:53:00

我是研究僧i 提交于 2019-11-26 16:10:27
原文: http://106.13.73.98/__/27/ 目录 普通索引 唯一索引 主键索引 组合索引 正确使用索引的情况 索引的注意事项 执行计划 axplain 慢日志记录 分页性能相关方案 索引是数据库中专门用于帮助用户快速查找数据的一种数据结构. 类似于字典中的目录,查找字典内容可以根据目录查找到数据的存放位置,然后直接获取. 作用:约束和加速查找 常见的几种索引: - 普通索引 - 唯一索引 - 主键索引 - 联合索引(多列) -- 联合主键索引 -- 联合唯一索引 -- 联合普通索引 无索引和有索引的区别: 无索引: 从前往后一条一条查询. 有索引: 创建索引的本质,就是创建额外的文件,以某种格式存储,查询的时候,先去额外的文件找,确定了位置,然后再去原始表中直接查询,但是创建的索引越多,越会对硬盘有损耗. ——————————— 建立索引的目的: 额外的文件保存特殊的数据结构 查询快,但是插入更新删除依旧慢 创建索引之后,必须命中索引才能有效 索引的种类: hash索引: 查询单条快,范围查询慢 btre类索引: b+树,层数增多,数据量指数级增长 (InnoDB默认支持btree索引,这里就使用它) 索引名词: 覆盖索引: 在索引文件中直接获取数据 (例如:select name from userinfo where name = 'zyk';) 索引合并:

linux下的lnmp(CentOS linux+nginx+mysql+php+zend + eAccelerator)的应用介绍

非 Y 不嫁゛ 提交于 2019-11-26 15:50:02
linux下的lnmp(CentOS linux+nginx+mysql+php+zend + eAccelerator)的应用介绍 lnmp 是( CentOS Linux +Nginx+MySQL+PHP)组合的简写,是最近两年发展得比较快,也比较流行的一个高性能网站服务器架构组合 相比 lamp ( CentOS Linux +Apache+MySQL+PHP)来说,Nginx的性能更高 详细的安装说明及安装脚本请看 http://www.wdlinux.cn/lanmp Linux操作系统( Linux ),是一类Unix计算机操作系统的统称。Linux操作系统的内核的名字也是“Linux”。Linux操作系统也是自由软体和开放源代码发展中最著名的例子.更多的介绍请看 http://www.wdlinux.cn/what_linux Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器 。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的Rambler.ru 站点开发的,它已经在该站点运行超过四年多了。Igor 将源代码以类BSD许可证的形式发布。自Nginx 发布四年来,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了

mysql定时任务(event事件)

蹲街弑〆低调 提交于 2019-11-26 14:51:17
1.事件简介 事件(event)是MySQL在相应的时刻调用的过程式数据库对象。一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”。 事件和触发器类似,都是在某些事情发生的时候启动。当数据库上启动一条语句的时候,触发器就启动了,而事件是根据调度事件来启动的。由于他们彼此相似,所以事件也称为临时性触发器。 事件取代了原先只能由操作系统的计划任务来执行的工作,而且MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次。 2 事件的优缺点 2.1 优点 一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。 可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下就非常实用了。 2.2 缺点 定时触发,不可以调用。 3 创建事件 一条create event语句创建一个事件。每个事件由两个主要部分组成,第一部分是事件调度(eventschedule,表示事件何时启动以及按什么频率启动; 第二部分是事件动作(event action),这是事件启动时执行的代码,事件的动作包含一条SQL语句,它可能是一个简单地insert或者update语句,也可以使一个存储过程或者 benin...end语句块,这两种情况允许我们执行多条SQL。

[MySQL] MySQL索引原理及优化

拥有回忆 提交于 2019-11-26 14:22:31
一 索引的本质   MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质: 索引是数据结构 。   数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。   最基本的查询算法当然是 顺序查找 (linear search),这种复杂度为O(n)的算法在数据量很大时显然是糟糕的,好在计算机科学的发展提供了很多更优秀的查找算法,例如 二分查找 (binary search)、 二叉树查找 (binary tree search)等。如果稍微分析一下会发现,每种查找算法都只能应用于特定的数据结构之上,例如二分查找要求被检索数据有序,而二叉树查找只能应用于 二叉查找树 上,但是数据本身的组织结构不可能完全满足各种数据结构(例如,理论上不可能同时将两列都按顺序进行组织)。   所以,在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。      图片展示了一种可能的索引方式。左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址(注意逻辑上相邻的记录在磁盘上也并不是一定物理相邻的)。为了加快Col2的查找

Mysql优化部分总结

随声附和 提交于 2019-11-26 14:02:45
1. 存储引擎的选择 存储引擎:MySQL中的数据、索引以及其他对象的存储方式 5.1之前默认存储引擎是MyISAM,5.1之后默认存储引擎是Innodb。 差异: 区别 MyISAM Innodb 文件格式 数据和索引是分别存储的,数据.MYD,索引.MYI 数据和索引是集中存储的.ibd 文件能否移动 能,一张表就对应.frm,MYD,MYI 3个文件 不能,关联的还有data下其他文件 记录存储顺序 按记录插入顺序保存 按主键大小有序插入 空间碎片 产生;定时清理,使用命令optimize table表名实现 不产生 事务 不支持 支持 外键 不支持 支持 锁颗粒 表级锁 行级锁 MyISAM引擎设计简单,数据以紧密格式存储,所以某些读取场景下性能很好。 如果没有特别的需求,使用默认的Innodb即可。 MyISAM:以读写插入为主的应用程序,比如博客系统、新闻门户网站。 Innodb:更新(删除)操作频率也高,或者要保证数据的完整性;并发量高,支持事务和外键保证数据完整性。比如OA自动化办公系统。 《高性能Mysql》一书中列举很多存储引擎,但是其强烈推荐使用Innodb即可 2. 字段设计 - 数据库设计3大范式 第一范式(确保每列保持原子性) 第二范式(确保表中的每列都和主键相关) 第三范式(确保每列都和主键列直接相关,而不是间接相关) 通常建议使用范式化设计