mysql数据库索引使用注意事项

    为了提高数据库查询速度,我们一般都会给数据库建立索引。所谓索引就是通过索引值快速找到数据所在位置,从而实现快速访问。而索引还有另一个作用就是不用真正查看数据而做一些判断,例如查看是否存在所寻数据。

    mysql的索引一般为B+树,以InnoDB为例,有两种类型的B+树索引,一种称为聚簇索引,一种称为二级索引。聚簇索引的叶子节点就是数据节点,往往是主键作为聚簇索引,二级索引的叶子节点存放的是KEY字段加主键值。因而通过二级索引访问数据,在找到叶子节点后,还需根据主键值去聚簇索引找到具体的数据行。还有一种索引称为复合索引,可以在多个列上创建索引,排序规则为:先比较第一列,再比较第二列,以此类推。

    由于B+数索引是排好序的,因此可以快速定位到所需数据,同理对于order by/group by/ distinct/max/min均可以快速找到结果。但是索引同时会降低写的效率,因为插入或者修改数据都有可能意味着索引的改变。

    下面再来说说利用索引来提高查询效率时我们需要注意什么:

    1、不要在列上使用函数和进行运算,否则将不走索引,因为索引是事先生成的B+树,若需运算则无法与树对应

    2、尽量避免使用!=或not in或<>等否定操作符,否则将不走索引(无法与B+树形成对应关系)

    3、尽量避免用or来作为连接条件,可使用union all

    4、一个联合索引优于多个单列索引,因为多个单个索引仅能有一个索引生效,其余需要逐个判断

    5、联合索引最左前缀原则,若想走联合索引,则查询条件中必须有复合索引中的第一个字段

    6、索引不会包含带有null值的列,因此尽量不要让字段值为null,因为null值在B+树难以处理,需要特殊逻辑,反而拖慢效率

    7、隐式转换后将不走索引,例如select *from table where A=1,A实际为char,但是条件为数字1,需要隐式转换为“1”,此时不走索引

    8、使用like语句左模糊或全模糊将不走索引

以下为索引使用小技巧:

1、若是列的区分度不高,则没必要设置索引,例如性别,仅相当于把表拆分成了两部分

2、索引并非越多越好,太多会影响插入删除修改的效率

3、主键默认为唯一索引,需要用自增主键,若为字符串或UUID等,由于无序会导致数据随机插入,效率极差

主键与唯一索引的区别:

1、主键只能有一个,唯一索引可以有多个

2、主键可以作为外键,唯一索引不可作为外键

3、主键也是唯一索引

数据库建表注意事项:

1、字段长度不宜过长,按照所需设置即可

2、用varchar代替char,若可以为数字型的字段就不要设置为varchar型

3、尽量不要设置字段为nullable,因为字段为null走索引会需要特殊处理,影响效率,可设置default ""

4、可适当冗余字段以减少表的join,优化性能

5、频繁更新的字段酌情看是否设为索引,因为频繁的更新会引起索引的频繁更新重建,影响插入,更新效率

6、主键的选取若非不得已不要选择业务字段,应该选择有序单调递增的数字,以利于聚簇索引的生成



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值