什么是解释计划:
使用 EXPLAIN 关键字可以模拟优化器执行 SQL 查询语句,从而知道 MySQL 是
如何处理你的 SQL 语句的。分析你的查询语句或是表结构的性能瓶颈
执行计划的语法
EXPLAIN select * from table1
解释计划包含的列以及其作用
ID 列:描述 select 查询的序列号,包含一组数字,表示查询中执行 select 子句或操作表的顺
序
根据 ID 的数值结果可以分成一下三种情况
id 相同:执行顺序由上至下
id 不同:如果是子查询,id 的序号会递增,id 值越大优先级越高,越先被执行
id 相同不同:同时存在
select__type
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 就能将该查询转换为一个常量
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=''