什么是解释计划:

使用 EXPLAIN 关键字可以模拟优化器执行 SQL 查询语句,从而知道 MySQL 是

如何处理你的 SQL 语句的。分析你的查询语句或是表结构的性能瓶颈

 

执行计划的语法

EXPLAIN select * from table1

 

解释计划包含的列以及其作用

mysql06-解释计划_mysql

 

 

ID 列:描述 select 查询的序列号,包含一组数字,表示查询中执行 select 子句或操作表的顺

根据 ID 的数值结果可以分成一下三种情况

 id 相同:执行顺序由上至下

 id 不同:如果是子查询,id 的序号会递增,id 值越大优先级越高,越先被执行

 id 相同不同:同时存在

 

 

select__type

mysql06-解释计划_mysql_02

 

 

type 显示的是访问类型

 

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery >

index_subquery > range > index > ALL

 

System:表只有一行记录(等于系统表),这是 const 类型的特列,平时不会出现,这个也

可以忽略不计

Const:表示通过索引一次就找到了

const 用于比较 primary key 或者 unique 索引。因为只匹配一行数据,所以很快

如将主键置于 where 列表中,MySQL 就能将该查询转换为一个常量

 

mysql06-解释计划_mysql_03

 

 

ref

显示索引的哪一列被使用了,如果可能的话,是一个常数。哪些列或常量被用于查找索引列

上的值


 

 ================================================

sql 优化

 

策略 1.尽量全值匹配

策略 2.最左前缀

策略 3.不要在索引列做操作

策略 4.范围查询放最后

策略 5.尽量用覆盖索引,少用select *,尽量访问索引列

策略 6. 尽量不要用不等于

策略 7.not  null会用索引列失效,like的左%会使索引失效

策略 8.or.union 比 or 效率高

 

 

insert的优化

关闭自动提交,攒一些在提交,也就是批量插入

 

 

LOAD DATA INFLIE;

使用 LOAD DATA INFLIE ,比一般的 insert 语句快 20 倍

select * into OUTFILE 'D:\\product.txt' from product_info

load data INFILE 'D:\\product.txt' into table product_info

load data INFILE '/soft/product3.txt' into table product_info

show VARIABLES like 'secure_file_priv'

 secure_file_priv 为 NULL 时,表示限制 mysqld 不允许导入或导出。

 secure_file_priv 为 /tmp 时,表示限制 mysqld 只能在/tmp 目录中执行导入导出,其他

目录不能执行。

 secure_file_priv 没有值时,表示不限制 mysqld 在任意目录的导入导出。

secure_file_priv=''