索引的一些思考

一.优化原则

    1.尽量保持数据唯一性,唯一性太差,及时查询效率太差也不行

    2.数据更新尽量少,太频繁 ,重建索引代价太大

    3.数据频繁查询的要考虑建索引

    4.索引建立是按照条件查询的字段上

二.索引的具体注意使用场景

    1.比如状态值,几种类型的 全表的查询效率要比建索引效率高。(阀值20% 某个值的占比)

    2.建立索引 ,一般是where后面的条件,或者join相关的字段,order by,group等

    3.模糊查询,使用左缀查询 ,避免全表查询 比如 like ‘%name%’

    4.使用短索引

              比如char(150),数据的前几位比较唯一,可以给前几位建立短索引,节省空间,提高查询效率

    5.限制索引的数据,建议一般表不超过4个索引,过多会浪费存储空间,重建也需要消耗mysql资源

    6.表的记录数比较少的时候 可以不使用 (2000以内)

    7.避免全表扫描

        避免使用!= ,<,> ,in ,not in,字段为null判断

    8.索引打在函数上面,导致索引不作为

三.索引优化检测方式

   172725_9WoH_2413926.png

  id: 1

  select_type

        SIMPLE -- 查询类型(简单查询,联合查询,子查询)

  table:  

        显示这一行的数据是关于哪张表的

  type:

       显示连接使用了何种类型。从最好到最差的连接类型为system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery >index_subquery > range > index > ALL,const代表一次就命中,ALL代表扫描了全表才确定结果。一般来说,得保证查询至少达到 range级别,最好能达到ref。

   possible_keys: 

        -- 指出MySQL能使用哪个索引在该表中找到行。如果是空的,没有相关的索引。这时要提高性能,可通过检验WHERE子句,看是否引用某些字段,或者检查字段不是适合索引。 

   key:

     实际使用到的索引。如果为NULL,则没有使用索引。如果为primary的话,表示使用了主键。

  key_len:

      最长的索引宽度。如果键是NULL,长度就是NULL。在不损失精确性的情况下,长度越短越好

  ref:

    const -- 显示哪个字段或常数与key一起被使用。 

  rows:

    表示mysql要遍历多少数据才能找到,在innodb上是不准确的。

  Extra:

    Using where; Using index -- 执行状态说明,这里可以看到的坏的例子是Using temporary和Using  select_type

四.索引类型

    1.unique 唯一索引,不可以出现相同的值,但容许为null

    2.index 普通索引,容许出现相同的值

    3.primary key 主键索引,唯一,非空

    4.full index 全文索引

转载于:https://my.oschina.net/u/2413926/blog/1805734

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值