索引创建的原则
Posted yangqiong1989
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了索引创建的原则相关的知识,希望对你有一定的参考价值。
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
- 存了数值的字符串类型字段(如手机号),查询时记得不要丢掉值的引号,否则无法用到该字段相关索引,反之则没关系
以上是关于索引创建的原则的主要内容,如果未能解决你的问题,请参考以下文章