mysql索引

参考:mysql索引

前提

  索引是有成本的,这主要体现在 会降低插入和修改数据和删除数据的速度
  索引是可以加快查询速度的

 

所以哪些列应该创建索引呢?
  1:不需要被频繁更新的列(每秒钟 每分钟都要更新一次)
  2:出现在where和join中的列(因为索引是用来做查询的)

 

索引的优化措施:
  索引本身也是有成本的,因为索引需要建立大量的硬盘空间 去存放索引列,
  1:如果一个字符串长度是100,如果我们可以确定,该字符串前10个字符 已经可以做到唯一了,则可以设置只针对前10个字符进行索引
  2:索引列的基数越大,索引的效果越好。
  3:最左前缀原则:mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。
  4:应尽量避免在 where 子句中使用 or 来连接条件
    如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描。如:
    select id from t where num=10 or Name = 'fuzhu'
    可以这样查询,充分利用索引:
    select id from t where num = 10
    union all
    select id from t where Name = 'fuzhu'

  5:like %keyword或%keyword%索引失效,like keyword% 索引有效

 

什么时候需要使用索引
  索引本身是比较消耗资源的,其在加快查询速度的同时,降低了 增删改的速度,索引在使用索引的时候 需要权衡一下利弊
  1:如果一个表的记录只有一两千条 则没有必要使用索引
  2:一个列如果其中 重复的值比较多,则没有必要使用索引
  3:一个表 不要设置太多的索引


普通索引 唯一索引 主键索引 全文索引
  上面四个索引分别代表不同情况下的索引,
  普通索引:最基本的索引
  唯一所以:加上一个约束条件:内容不可重复
  主键索引:再加上一个约束,不可以有null值
  全文索引:主要是解决 文本匹配问题,其效率要高于like

posted @ 2019-12-12 19:39  dami.white  阅读(153)  评论(0编辑  收藏  举报