• mysql
  • Type级别解释
  • system级别: 只有一条数据的系统表,或衍生表只能有一条数据的主查询很明显 实际开发当中 我们是不会只有一条数据的
  • const级别: 仅仅能查出一条的SQL语句并且用于Primary key 或 unique索引;SELECT * from shop s where s.id=?主键索引 唯一索引 和 unique索引 达到这个级别 我们写sql 要根据公司的业务去写 这个情况也很难达到的
  • eq_ref级别唯一性索引:对于每个索引键的查询,返回匹配唯一行数据(有且只有1个,不能多,不能0);比如你select …from 一张表 where 比方说有一个字段 name = 一个东西,也就是我们以name作为索引,假设我之前给name加了一个索引值,我现在根据name去查,查完后有20条数据,我就必须保证这二十条数据每行都是唯一的,不能重复不能为空!只要满足以上条件,你就能达到eq_ref,当然前提是你要给name建索引,如果name连索引都没,那你肯定达不到eq_ref;此种情况常见于唯一索引和主键索引; 比如我根据name去查,但是一个公司里面或一个学校里面叫name的可能不止一个,一般你想用这个的时候,就要确保你这个字段是唯一的,id就可以,你可以重复两个张三,但是你身份证肯定不会重复;
  • 添加唯一键语法:alter table 表名 add constraint 索引名 unique index(列名)检查字段是否唯一键:show index form 表名;被展示出来的皆是有唯一约束的;
  • ref级别: ref级别的 问题不大非唯一性索引:对于每个索引键的查询,返回匹配的所有行(可以是0,或多个)假设有俩张三 我建立了 非唯一索引 那么查出来就是这个级别拉 是不是很简单
  • range级别,检索指定范围的行,查找一个范围内的数据,where后面是一个范围查询 (between,in,> < >=);in 有时 有可能会失效,导致为ALL ; 索引失效 (in失效的情况 我是没试出来…) 当数据量大且作用的字段的值分布仅限那么几种时候不如全表扫描字典表, 总数据:77个,23个分组,以分组in10个走range 1个走ref 地区表:21条数据,地区id不一样,6条走range,1条走const OR条件一样 (like '张%') 索引失效:再不同的数据量体量下mysql会自动判断是否走索引
  • index级别把索引的数据全查出来 就是这个级别了
  • ALL级别不做索引 就是all级别了
  • 聚族索引指的是索引与数据存放一起且数据按照索引排列的顺序存放,innodb是聚族索引,MyISAM是非聚族索引(MyISAM 数据和文件分开存放的,innodb索引文件一起的)。