MySQL查询优化:Index Merge
一、为什么会有Index Merge? Index Merge 访问方法检索具有多个 range 扫描的行并将它们的结果合并为一个。这里的 range 就是 explain 中的 type: range。此访问方法简单来说就是对单个表的多个索引分别进行条件扫描,然后将它们各自的结果进行集合运算(Intersect/Union)。 MySQL 5.0之前,一个……
从顺序随机I/O原理来讨论MySQL MRR NLJ BNL BKA
一、机械磁盘原理 机械盘由动臂,盘片,读写磁头,主轴组成,磁头是固定不能动的,要读取相应的扇区只能通过盘片的旋转。每一个盘片为双面,每一个面上分布有同心圆的磁道,磁道又分为扇区一般为512 BYTES,现代的磁盘一般外边缘磁道的扇区多,内磁道的扇区少,那么一般读写外边缘磁道的速度更快,因为转速为定值。同时各个不同盘片上半径下同的磁道组成了一个柱面。 下图是一……
MySQL查询优化:子查询物化
一、背景 MySQL引入了Materialization(物化)这一关键特性用于子查询(比如在IN/NOT IN子查询以及 FROM 子查询)优化。 具体实现方式是:在SQL执行过程中,第一次需要子查询结果时执行子查询并将子查询的结果保存为临时表 ,后续对子查询结果集的访问将直接通过临时表获得。与此同时,优化器还具有延迟物化子查询的能力,先通过其它条件判断子……
MySQL查询解析顺序
一、逻辑查询处理 SQL语言不同于其他编程语言,最明显的不同体现在处理代码的顺序上。在大多数编程语言中,代码按编码顺序被处理。但在SQL语言中,第一个被处理的子句总是FROM子句。下面显示了逻辑查询处理的顺序以及步骤的序号。 (8) SELECT (9) DISTINCT <select_list> (1) FRO……
MySQL运算符介绍
运算符是告诉MySQL执行特殊算术或逻辑操作的符号,主要用于在SQL语句的WHERE子句来执行,比较和算术运算等操作。运算符用于指定一个SQL语句中的条件,并作为连词多个条件在一份声明中。MySQL的内部运算符很丰富,主要有四大类:算术运算符、比较运算符、逻辑运算符、位操作运算符。 一、算术运算符 运算符 作用 + 加法运算 –……
MySQL索引原理及SQL优化
MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等要求。我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少……
MySQL查询优化:GROUP BY
一、group by 当我们执行 group by 操作在没有合适的索引可用的时候,通常先扫描整个表提取数据并创建一个临时表,然后按照 group by 指定的列进行排序。在这个临时表里面,对于每一个 group 的数据行来说是连续在一起的。完成排序之后,就可以发现所有的 groups,并可以执行聚集函数(aggregate function)。可以看到,在……
MySQL查询优化:ORDER BY
通常我们通过explain查看MySQL执行计划时,经常会看到在Extra列中显示Using filesort。其实这种情况就说明MySQL使用了排序。Using filesort经常出现在order by、group by、distinct、join查询等情况下。 一、使用索引来满足ORDER BY 为了优化SQL语句的排序性能,最好的情况是避免排序,合理……
MySQL常见的SQL优化案例
前言 MySQL在2016年仍然保持强劲的数据库流行度增长趋势。越来越多的客户将自己的应用建立在MySQL数据库之上,甚至是从Oracle迁移到MySQL上来。但也存在部分客户在使用MySQL数据库的过程中遇到一些比如响应时间慢,CPU打满等情况。阿里云RDS专家服务团队帮助云上客户解决过很多紧急问题。现将《ApsaraDB专家诊断报告》中出现的部分常见SQ……
MySQL InnoDB外键约束详解
一、外键使用 在MySQL 3.23版本后,InnoDB引擎类型的表支持了外键约束,外键主要用于引用和参照完整性的约束检查。外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作。但是外键的使用是有一些必要条件的: 1. 两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持); 2. 外键列必须建立……
SQL语句之truncate和drop以及delete命令的区别
一、环境 创建一个表s_user(有主键且自增) create table s_user( u_id int auto_increment primary key, u_name varchar(15), u_pwd varchar(15), u_truename ……
MySQL SQL语言介绍
一、SQL是什么? SQL是结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。 SQL是关系型数据库系统的标准语言,所有关系数据库管理系统,如MySQL,MS Access,Oracle,SYBASE,……