mysql 索引的建立原则

9 篇文章 0 订阅
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
    - 存了数值的字符串类型字段(如手机号),查询时记得不要丢掉值的引号,否则无法用到该字段相关索引,反之则没关系
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值