关于索引失效

1. 使用 EXPLAIN EXPLAIN 是很重要的一个 sql 关键字,可以帮我们查看 sql 的执行计划,寻找到 sql 的问题,优化你的 sql。 使用起来却很简单,只需要在你原来的 sql 前面添加 EXPLAIN 即可,但是我们的重点是在分析执行计划上。 EXPLAIN SELECT * FROM t_order; 执行计划各列的含义如下:详情请参考官方文档 列名 含义 id 执行序号,mysql 会按照从大到小的顺序执行 select_type 查询类型:SIMPLE 简单查询,PRIMARY 外层查询,SUBQUERY 子查询,DERIVED 派生查询(FROM 中包含的子查询),UNION UNION 中第二个或后面的那个查询,UNION RESULT UNION 的结果 table 引用的表 partitions 所属分区 type 访问类型官方文档,常见访问类型:system 只有一条记录的表(=系统表),const 通过索引一次就查询到,eq_ref 唯一索引等值扫描,ref 非唯一索引等值扫描,range 范围索引扫描,index 索引扫描,all 全表扫描 possible_keys 可能使用的索引(优化前) key 实际使用的索引(优化后) key_len 使用索引的长度 ref 上述表的连接匹配条件(哪些列或常量被用于查找索引列上的值) rows 必须扫描的行数 Extra 附加信息官方文档,常见附加信息:Using filesort mysql 无法利用索引完成排序操作,Using temporary 使用了临时表保存中间结果,Using index select 操作使用了覆盖索引,Using where 使用 where 过滤,using join buffer 使用了连接缓存,impossible where where子句的值总是false,不能用来获取任何记录,distinct 优化 distinct,在找到第一个匹配的记录后停止扫描同样值的动作 2....

December 26, 2019 · 2 min · sunbufu

数据库范式

数据库范式的定义 在设计数据库的时候,为了设计出合理的关系型数据库,就需要遵循一些规范要求,这些规范要求被成为数据库范式。 目前,关系型数据库主要有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。一般来说,数据库满足前三个范式就可以了。 第一范式(1NF) 定义 所谓第一范式(1NF)是指在关系模型中,对域添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域。 解释 第一范式是指数据库表中的每个字段都是不可分解的,即数据库表中的字段具有原子性。 例如,我们有个学生信息表,如下: id name age address 001 张三 26 山东省青岛市XX县XX镇XX村XX号 002 李四 25 河南省开封市XX县XX区XX号 这个表就违反了第一范式,因为表中的字段 地址(address) 可以重新拆分为 省(address_province) 市(address_city) 详细地址(address_detail)。 id name age address_province address_city address_detail 001 张三 26 山东省 青岛市 XX县XX镇XX村XX号 002 李四 25 河南省 开封市 XX县XX区XX号 如上图所示的表遵循了第一范式,对学生的地址管理就方便了很多,也能提高数据库的性能。比如我们要查询青岛市的学生有谁的时候。...

June 13, 2018 · 1 min · sunbufu

SQL总结

一、SQL定义 SQL语言的全称是Structured Query Language,即结构化查询语言。 1、SQL分类 1)DQL(Data Query Language 数据查询语言) 查询语句只有一种,即SELECT语句。 2)DML(Data Manipulation Language 数据操作语言) 包括:INSERT、UPDATE、DELETE等常用语句。 3)DDL(Data Definition Language 数据定义语言) 包括:CREATE(创建),ALTER(修改),DROP(删除),RENAME(重命名),TRUNCAT(截断)等常用语句。 4)DCL(Data Control Language 数据控制语言) 包括:GRANT(权限分配),REVOKE(权限回收),TRANSACTION(事务处理)。 5)事务控制语句TRANSACTION(事务处理) 包括:COMMIT(提交)、ROLLBACK(回滚)等常用语句。 二、DQL(Data Query Language 数据查询语言) 1、列查询 1)单列查询 SELECT 字段 [AS] [别名] FROM 表名; --别名显示时,AS可以省略,例如: SELECT EMPNO AS "ID" FROM EMP;--"ID"双引号表示原样显示 2)多列查询 SELECT 字段 [AS] [别名], 字段2 [AS] [别名2] ... 字段n [AS] [别名n] FROM 表名; 3)所有列查询 SELECT * FROM 表名; 4)去重 关键字:DISTINCT(明显的,独特的) SELECT DISTINCT 字段 [AS] [别名] FROM 表名; 2、行查询(限制查询、条件查询) SELECT 字段, 组函数....

June 6, 2018 · 4 min · sunbufu

sql语句

一、SQL定义 SQL语言的全称是Structured Query Language,即结构化查询语言。 1、SQL分类 1)DQL(Data Query Language 数据查询语言) 查询语句只有一种,即SELECT语句。 2)DML(Data Manipulation Language 数据操作语言) 包括:INSERT、UPDATE、DELETE等常用语句。 3)DDL(Data Definition Language 数据定义语言) 包括:CREATE(创建),ALTER(修改),DROP(删除),RENAME(重命名),TRUNCAT(截断)等常用语句。 4)DCL(Data Control Language 数据控制语言) 包括:GRANT(权限分配),REVOKE(权限回收),TRANSACTION(事务处理)。 5)事务控制语句TRANSACTION(事务处理) 包括:COMMIT(提交)、ROLLBACK(回滚)等常用语句。 二、DQL(Data Query Language 数据查询语言) 1、列查询 1)单列查询 SELECT 字段 [AS] [别名] FROM 表名; --别名显示时,AS可以省略,例如: SELECT EMPNO AS "ID" FROM EMP;--"ID"双引号表示原样显示 2)多列查询 SELECT 字段 [AS] [别名], 字段2 [AS] [别名2] ... 字段n [AS] [别名n] FROM 表名; 3)所有列查询 SELECT * FROM 表名; 4)去重 关键字:DISTINCT(明显的,独特的) SELECT DISTINCT 字段 [AS] [别名] FROM 表名; 2、行查询(限制查询、条件查询) SELECT 字段, 组函数....

June 1, 2018 · 4 min · sunbufu