MySQL创建索引需要注意的地方

索引:提高数据查询的速度,一般创建索引的列为很少改动的列。

1、例句: select * from user where userId = '123456789';

userId很少改变且是唯一值,可以对userID创建索引;

2、例句:select * from user where name = '李明' and age = 26;

如果name和age是不能为null的列,那么我们可以对这两列单独建立索引,但是如果经常使用这两列进行查询,就要创建复合索引(name, age);

3、例句:select * from user where name = '李明' and age = 26 and height = 175;

此时我们既想满足上面的条件又想满足下面的查询语句的条件的索引,可以会创建两个索引(name,age)和(name,age,height),但是通常可以创建复合索引(name,age,height)即可,因为复合索引满足最佳左前缀原则,会创建以下三个索引(name,age,height)、(name,age)、(name);

4、例句:select * from user where number like  '2017%';

学号是按年月日+四位数字,此时想查学号的年份是2017的学生,为了提高查询速度,如果对number建立索引使用,模糊查询(%123%)索引会失效,此时可以使用短索引,也就是只对number的前缀,前四位创建索引即可。

5、select * from user where grade = '二年级' order by number;

查询二年级的学生并对其进行排序,此时如果对grade和number分别创建了索引,采用上面的方式进行查询时,索引是没有效果的,因为where子句中已经有了索引,此时order by中的索引不会生效,导致整个sql语句的索引都不会生效。

6、select * from user where year(time) < 2017 and grade not in ('二年级','三年级');

此时无论是建立在time还是grade的索引都会失效,索引的列是不能进行计算的,采用计算该列的索引就会失效,使用not in 语句也会失效,不过可以使用not exists代替。

通常索引的列可以进行<,>,=,<=,>=,between,in操作。

如果sql语句中包含or,<>,like '%123',所在列不能null,尽量不要在重复值过多的列创建索引

7、in和not in在主键上的唯一索引是可以使用的,但是在其他不是唯一索引列索引是失效的。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值