mysql数据库操作(十四)

版权声明:版权由我个人所有,未经允许不得用于除学习外的其他用途,望周知。 https://blog.csdn.net/weixin_44515563/article/details/89676687

mysql官方对索引的定义为:索引(index)是帮助mysql高效获取数据的数据结构。

索引的本质是数据结构

排好序的快速查找数据结构

单值索引:即一个索引只包含单个列,一个表可以有多个单列索引。
唯一索引:索引列的值必须唯一,但允许有空值。
复合索引:即一个索引包含多个列。

mysql query optimizer  查询优化器

linux中用top,free,iostat.vmstat 等来进行分析。

explain (执行计划) explain+sql语句

id select_type table type possible_keys key key_len ref rows extra

id 代表:

{
	id 相同,执行顺序由上至下
	id不同,如果是子查询,id的序号会递增,id值越大,优先级越高,越先被执行。
	id相同又不同,同时存在
}
如果id相同,可以认为是一组,从上往下顺序执行。
在所有组中,id值越大,优先级越高,越先执行。

select_type:

{
	1.simple		简单查询
	2.primary		主查询
	3.subquery 		子查询
	4.derived 衍生
	5.union 联合
	6.union result
}

type:

{
	从最好到最差(常用的部分)system>const>eq_ref>ref>range>index>all
	system:表示系统表之类的。长量
	const --常量
	eq_ref --唯一性索引(主键,唯一)
	range --范围
	index--索引扫描
	all--全表扫描

}

possible_keys:可能用到的索引,一个或多个。但不一定被查询实际使用

key:实际使用的索引

key_len:长度越短越好,定义算出,不是实际的。

ref :

rows–越小越好

extra–额外信息

{
			1.using filesort   文件排序   不好 (九死一生)
			2.using tempoaray 临时表  非常不好(十死无生)
			3.using index --速度不错 好事
		}

sql优化注意事项:

{

## 1.全值匹配我最爱 

## 2.最佳左前法则

## 3.不在索引列上左任何操作(计算,函数,(自动或手动)类型转换),会导致索引失效而转向全表扫描。

## 4存储引擎不能使用索引中范围条件右边的列

## 5.尽量使用覆盖索引(只访问索引的查询列一致),减少select *

## 6.mysql 在使用不等于(!=或者<>)的时候无法使用索引,导致全表扫描

## 7. is null is not null 也无法使用索引

## 8.like 以通配符开头(‘%aaa’)mysql索引失效会变成全表扫描的操作

## 9.字符串不加单引号索引失效

## 10.少用or来连接时索引会失效

}

记忆口诀:

		1.带头大哥不能死
		2.中间兄弟不能断
		3.索引列上无计算
		4.like %加右边
		5.范围之后全失效
		6.字符串上加引号

猜你喜欢

转载自blog.csdn.net/weixin_44515563/article/details/89676687