加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySql中sql如何优化

发布时间:2022-06-20 02:15:39 所属栏目:MySql教程 来源:互联网
导读:这篇文章主要介绍了MySql中sql怎么优化,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 一、explain返回列简介 1、type常用关键字 system const eq_ref ref range index all。 system
  这篇文章主要介绍了MySql中sql怎么优化,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
 
  一、explain返回列简介
  1、type常用关键字
  system > const > eq_ref > ref > range > index > all。
 
  system:表仅有一行,基本用不到;
  const:表最多一行数据配合,主键查询时触发较多;
  eq_ref:对于每个来自于前面的表的行组合,从该表中读取一行。这可能是最好的联接类型,除了const类型;
  ref:对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取;
  range:只检索给定范围的行,使用一个索引来选择行。当使用=、<>、>、>=、<、<=、IS NULL、<=>、BETWEEN或者IN操作符,用常量比较关键字列时,可以使用range;
  index:该联接类型与ALL相同,除了只有索引树被扫描。这通常比ALL快,因为索引文件通常比数据文件小;
  all:全表扫描;
  实际sql优化中,最后达到ref或range级别。
 
  2、Extra常用关键字
  Using index:只从索引树中获取信息,而不需要回表查询;
 
  Using where:WHERE子句用于限制哪一个行匹配下一个表或发送到客户。除非你专门从表中索取或检查所有行,如果Extra值不为Using where并且表联接类型为ALL或index,查询可能会有一些错误。需要回表查询。
 
  Using temporary:mysql常建一个临时表来容纳结果,典型情况如查询包含可以按不同情况列出列的GROUP BY和ORDER BY子句时;
 
  索引原理及explain用法请参照前一篇:MySQL索引原理,explain详解
 
  二、 单表sql优化
  1、删除student表中的联合索引。
 
  2、添加索引
  alter table student add index student_union_index(name,age,sex);
 
  优化一点,但效果不是很好,因为type是index类型,extra中依然存在using where。
 
  3、更改索引顺序
  因为sql的编写过程
 
  select distinct ... from ... join ... on ... where ... group by ... having ... order by ... limit ...
  解析过程
 
  from ... on ... join ... where ... group by ... having ... select distinct ... order by ... limit ...
  因此我怀疑是联合索引建的顺序问题,导致触发索引的效果不好。are you sure?试一下就知道了。
 
  alter table student add index student_union_index2(age,sex,name);
  删除旧的不用的索引:
 
  drop index student_union_index on student
  索引改名
 
  ALTER TABLE student RENAME INDEX student_union_index2 TO student_union_index
  更改索引顺序之后,发现type级别发生了变化,由index变为了range。
 
  range:只检索给定范围的行,使用一个索引来选择行。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读