MySql查询语句优化

大批量插入数据时

1.大批量数据插入空表,可将表设置成为MyISAM,并通过disable keys将唯一索引关闭;
2.大批量插入插入非空Innodb表,可采用如下措施提高效率:
   2.1 导入数据时按照主键顺序排列;
   2.2 导入数据前使用set UNIQUE_CHECKS=0,关闭唯一性效验,导入后恢复;
   2.3 如果使用了自动提交,建议再导入前执行SET AUTOCOMMIT=0,关闭自动提交,导入后恢复。

优化INSERT语句

1.尽量使用多个值表的insert语句,降低连接、关闭的消耗。
2.将索引文件和数据文件分再不同的磁盘上存放。
3.从一个文本文件装入一个表时,使用LOAD DATA INFLIE,比一般的insert语句快20倍。

提高sql语句效率的技巧

1.尽量减少额外的排序,通过索引直接返回有序数据;where条件和order by使用相同的索引,并且order by的顺序与索引顺序相同,并且order by的字段都是升序或者都是降序;
2.尽量只选择必要的字段,提高sql性能;
3.能用关联查询的不要用子查询。
4.对于包含or的查询语句,如果要利用索引,则or之间的每个条件都必须用到索引,否则应该考虑增加索引;
5分页优化
    5.1:在索引上完成排序分页的操作,然后根据主键关联回原表查询所需的其他列;
    5.2:把limit查询转换为某个位置的查询;

什么情况下会不走索引

1:如果Mysql估计使用索引比全表扫描更慢,则不适用索引。
2.用or分隔开的条件,如果or前的条件中的列有索引,而后面的列没有索引,那么涉及到的索引都不会被使用;
3.符合索引,如果索引列不是复合索引的第一部分,则不使用索引(即不符合最左前缀);
4.如果like是以‘%'开始的,则该列上的索引不会被使用;
5.如果列为字符串,则where条件中必须将字符串常量值加引号,否则即使该列上存在索引,也不会被使用;
6:not in、not exists、(<,>, !=) 这些操作符不走索引;
7:不要在where 子句中的"="左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引;

通过explain 分析执行的sql语句

select_type
查询的类型,主要是用于区分普通查询、联合查询、子查询等复杂的查询

1.SIMPLE:简单的select查询,查询中不包含子查询或者union;
2.PRIMARY:查询中包含任何复杂的子部分,最外层查询则被标记为primary
3.SUBQUERY: 在select或where列表中包含了子查询
4.UNION:若第二个select出现在union之后,则被标记为union;若union包含在from子句的子查询中,外层select将被标记为derived;

type
访问类型,sql查询优化中一个重要指标,结果值从好到坏依次是

system > const > eq_ref > ref > range > index > ALL

1.system:表只有一行记录(等于系统表),这是const类型的特征,平时不会出现,可以忽略不计;
2.const:表示通过索引一次就找到了,const用于比较primary key或者unique索引;
3.eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配(1:1);
4.ref:非唯一性索引扫描,返回匹配某个单独值所有行;
5.range:索引范围扫描;
6.index:索引全扫描;
7.ALL:全表扫描;

possible_keys
查询涉及到的字段上存在的索引,则该索引将被列出,但不一定被查询实际使用
key
实际使用的索引,如果为NULL,则没有使用索引
key_len
表示索引中使用字节数,查询中使用的索引的长度(最大可能长度),并非实际使用长度,理论上越短越好;
ref
显示索引的那些列;
rows
根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数;
Extra
不适合在其他字段中显示,但是十分重要的额外信息;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值