关于索引使用的注意事项

使用索引的代价:

①索引需要占用硬盘空间,这是空间方面的代价
②一旦插入新数据,就需要重新建立索引,这是时间上的代价。

场景一:数据表规模不大,即使不建立索引,查询语句的返回时间也不长,这时建立索引的意义就不大。如果要建立索引,顶多来说也就是“性价比”不高而已。

场景二:某个商品表中有上万条商品信息,同时每天会在一个时间点往其中增加大概十万条的商品信息,现在用where条件查询时就会很慢。为了提升查询效率可以建立索引,但当每天跟新数据时,又会重建索引,这很耗费时间,这种情况下可以考虑更新前删除索引,更新后再重建索引。

场景三:在数据表中如何ID值都不相同,可以考虑使用索引,相反,如果某个字段重复率很高,如性别字段,或者某个字段大多数值为null,那么就不建议使用索引。

下面举几个栗子可以看的更直观:

①语句一: SELECT name FROM 商品表。不会建立索引,因为没有where语句。

②语句二: SELECT * FROM 商品表 WHERE name = 'java'会用到索引,如果项目里经常用到name来查询,且商品表中的数据量很大,而name值的重复率又不是很高,那么就建议建立索引。

③语句三: SELECT * FROM 商品表 WHERE name LIKE '%JAVA'这个模糊查询,会用到索引,但是用LIKE查询时如果第一个就是模糊的匹配符,比如WHERE name LIKE '%JAVA',那么在查询时就不会建立索引。其他情况下,不论用来多少个%,也不论%的位置,只要不出现在第一个位置上,那么都能用到索引。

学生成绩表中有“姓名”和“成绩”两个字段。现在要地成绩这个整数类型的字段建立索引。

  • 第一种情况:当数字类型字段遇到非等值操作符时,无法使用索引:例如:SELECT name FROM 学生成绩 WHERE 成绩 > 95,一旦出现大于符号,就不能使用索引,为了使用索引我们可以换一种方式:SELECT name FROM 学生成绩 WHERE 成绩 IN(96,97,98,99,100)
  • 第二种情况,如果对索引字段进行了某种左值操作,那么无法使用索引。
    • 可以使用索引的写法:SELECT name FROM 学生成绩表 WHERE 成绩 =60
    • 不能使用索引的写法:SELECT name FROM 学生 成绩表 WHERE 成绩+40=100
  • 第三种情况:如果对索引字段进行了函数操作,那么无法用到索引。例如:SELECT * FROM 商品表 WHERE substr(name)='J',我们希望查询商品名首字母是J的记录,可一旦针对name使用函数,即使name字段上有索引 也无法用到。
  • -
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值