zoukankan      html  css  js  c++  java
  • 索引创建的原则

    1、索引分四类:

    index ---- 普通索引,数据可以重复
    fulltext ---- 全文索引,用来对大表的文本域(char,varchar,text)进行索引
    unique ---- 唯一索引,要求所有记录都唯一
    primary key ---- 主键索引,也就是在唯一索引的基础上相应的列必须为主键

    2、使用索引需注意:

    (1). 只对 where 和order by 需要查询的字段设置索引,避免无意义的硬盘开销;
    (2). 组合索引支持前缀索引;
    (3). 更新表的时候,如增删记录,MySQL会自动更新索引,保持树的平衡;因此更多的索引意味着更多的维护成本

    3、索引建立原则

    (1). 尽量减少like,但不是绝对不可用,”xxxx%” 是可以用到索引的
    (2). 表的主键、外键必须有索引
    (3). 谁的区分度更高(同值的最少),谁建索引,区分度的公式是count(distinct(字段))/count(*)
    (4). 单表数据太少,不适合建索引
    (5). where,order by ,group by 等过滤时,后面的字段最好加上索引
    (6). 如果既有单字段索引,又有这几个字段上的联合索引,一般可以删除联合索引;
    (7). 联合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:
    (8). 联合索引: mysql 从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index(a,b,c). 可以支持 a|a,b|a,b,c 3种组合进行查找,但不支持 b,c 进行查找.当最左侧字段是常量引用时,索引就十分有效。
    (9). 前缀索引: 有时候需要索引很长的字符列,这会让索引变得大且慢。通常可以索引开始的部分字符,这样可以大大节约索引空间,从而提高索引效率。其缺点是不能用于ORDER BY和GROUP BY操作,也不能用于覆盖索引 Covering index(即当索引本身包含查询所需全部数据时,不再访问数据文件本身)。
    (10). NULL会导致索引形同虚设

    4、禁用索引

    - like “ %xxx ”
    - not in , !=
    - 对列进行函数运算的情况(如 where md5(password) = “xxxx”)
    - WHERE index=1 OR A=10
    - 存了数值的字符串类型字段(如手机号),查询时记得不要丢掉值的引号,否则无法用到该字段相关索引,反之则没关系

  • 相关阅读:
    CF321D
    oracle 第25章 闪回技术
    oracle 第24章 Netbackup 备份恢复
    oracle 第23章 RMAN 备份恢复
    oracle 第22章 EXP/IMP/EXPDP/IMPDP 备份恢复
    oracle 第21章 dblink
    oracle 第20章 序列号和同义词
    oracle 第19章 视图
    oracle 第18章 索引
    oracle 第17章 表
  • 原文地址:https://www.cnblogs.com/yangqiong1989/p/10750869.html
Copyright © 2011-2022 走看看