美文网首页
面试被问索引怎么建,看这一文就够了

面试被问索引怎么建,看这一文就够了

作者: MCNU云原生 | 来源:发表于2019-08-18 23:30 被阅读0次

    什么情况下需要创建索引,索引应该怎么建效率最高?这是面试常见的问题,下面我们就一起来看看所以创建过程中应该注意些什么。

    • 优先使用主键索引
      一般来说主键是由一个业务对象的某一个或者多个属性组成的,其在业务上具有唯一标识的特性。例如一个User对象,userid用户ID可以唯一标识一个用户,可以作为主键。
      在查询时,使用主键字段作为条件进行查询可以使用到主键索引,查询速度很快。

    • 业务上具备唯一性的一个或者多个字段必须创建唯一键索引,这个规则不止是用于索引,也用于对业务唯一性进行数据库层面的控制。

    • 单列等值和非等值的查询,需要为该字段创建索引,查询时会使用到该索引,提高查询速度。如下所示

      select * from table where a=1;
      select * from table where a is null;
      select * from table where a is true;
      select * from table where a<=20;(<,<=,>,>=,!=,<>)
      select * from table where a between 10 and 20;(not between)
      select * from table where a like 'name%';(not like,注意a like '%name'无法使用索引)
      
    • 使用and进行多列的等值查询,需要分别计算每列区分度,按照区分度从大到小的顺序添加索引。如下所示

      -- 查询区分度
      select count(distinct column)/count(*) from table;
      --根据区分度大小建立索引,a区分度0.9,b区分度0.85,建立联合索引(a,b)
      select * from table where a=1 and b=2; 
      
    • 使用and进行多列的非等值的查询,需要分别计算每列的区分度,为索引区分度最大的字段建立索引,或者为每个字段都单独建立索引。

      --a区分度0.9,b区分度0.85,建立索引(a)或者(a)、(b)
      select * from table where a=1 and b=2;
      
    • 等值查询和非等值查询组合时,先采用等值查询的方法确定索引字段,再采用非等值查询的方法确定索引字段,然后将两者组合在一起。

      --a区分度0.9,b区分度0.85,c区分度0.8,d区分度0.9,建立索引(a,b,d)
      select * from table where a=1 and b=2 and c>1 and d<2;
      
    • 索引设计时尽量使用覆盖索引,覆盖索引是指索引内容包含了所需要查询的值,这样子一来,指通过索引就完成了查询,不需要重新扫描原表,速度会更快,一般来说使用explain命令查询mysql的查询语句,如果使用到了覆盖索引,则extra列会提示:Using index

    相关文章

      网友评论

          本文标题:面试被问索引怎么建,看这一文就够了

          本文链接:https://www.haomeiwen.com/subject/wpldsctx.html