mysql 索引的建立原则

来源:互联网 发布:200元左右的礼品 知乎 编辑:程序博客网 时间:2024/06/05 03:37
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    - 存了数值的字符串类型字段(如手机号),查询时记得不要丢掉值的引号,否则无法用到该字段相关索引,反之则没关系
0 0
原创粉丝点击