zoukankan      html  css  js  c++  java
  • 索引之单列索引和组合索引

    前几天老大叫我做了下索引优化,故将学到的东西记录下来。

    1)单列索引就不多说了,不设限制的唯一索引,值唯一的唯一索引,一个表一个非空的主键索引

    2)组合索引

    组合索引,多个列组合的索引。重点是理解最左前缀的原则。

    最左前缀

    若有组合索引(a,b,c),那么根据最左前缀,数据库成立了三个索引(a)(a,b)(a,b,c),

    重点:

    这里可以看出n个列的组合索引,实际新建的普通

    索引是n个,

    索引的列数是n(n+1)/2列,即高斯求和

    大小是n*a*a.length+(n-1)*b*b.lengtn+....+1*n*n.length。

    3)优化

    有了上面的重点,那么建立索引的基本要求就有了。

    1.索引的大小应该小于数据表的大小

    因为,每个数据不一定用的是最大的长度,而且建立索引的时间高于插入数据,实际上通常满足索引的列数小于数据库的列数,就能确保索引的大小应该小于数据表的大小。当然,具体公司具体分析,像淘宝的数据服务器估计为了查询速度,索引大小应该远高于数据表大小。

    2.组合索引第一个不应该包含单列索引

    原因,重复。(学名组合索引的前导索引/前导列)

    3.创建索引时,若一些用于模糊查询的可以只截前面一段,用于查询

    优化索引创建时间,索引大小等

    4)注意点

    1.操作:order by,where,join,查询条件:数据库只对<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE才会使用索引

    2.以通配符%和_开头作查询时,MySQL不会使用索引

    3.索引不会包含有NULL值的列

    4.在索引列上进行数学操作会变成全表查询

    5.不用NOT IN和<>操作,想想就明白,这两个操作下的查询效率和全表查询差不多。

  • 相关阅读:
    MySQL多表查询
    多表关联
    MySQL数据类型 约束
    初识数据库
    socker server和 event
    os 模块 和 os模块下的path模块
    sys 模块
    time 模块
    目录规范

  • 原文地址:https://www.cnblogs.com/ydymz/p/9167510.html
Copyright © 2011-2022 走看看