MySQL索引的学习与使用

最近在做的模块数据量较大,且业务需求全部是查询,所以尝试通过添加索引来提升查询速度。既然学了就记下吧。

索引可以在很大程度上提升数据的检索速度。索引实际上也是一张表,这个表里会保存索引字段,并指向实体记录。MySQL只对以下操作符才使用索引:<,<=,=,>,>=,between,in,以及某些时候的like(不以通配符%或_开头的情形)。而理论上每张表里面最多可创建16个索引,不过除非是数据量真的很多,否则过多的使用索引也不是最优的选择。因为使用索引会降低表更新的速度,在我们更新表数据的时候,我们同时还要维护索引信息,这也会花费一定的时间。另外,索引也会占用物理空间。


mysql的索引类型


1.普通索引,没有限制。

2.唯一索引(UNIQUE),与普通索引不同的是索引列的值必须唯一。

3.主键索引,索引列不能为null

4.组合索引,对多列创建索引,遵循最左前缀,比如说我对a,b,c三列创建了一个组合索引,这是会创建3组组合索引,分别为

a

a,b

a,b,c

这时我们如果根据a,b查询则会使用到我们创建的索引,但是根据a,c|b,c查就不会使用索引,因为没有组合a,c索引,同理,根据c来查也不会用到索引。

5.全文索引(FULLTEXT),对于大容量的数据表,尽量不使用全文索引,不仅耗时还耗磁盘空间。


索引使用注意事项


1、一般数据库的主键字段会默认被设置为唯一索引。

2、经常被作为搜索条件的列可以适当添加索引。

3、查询只使用一个索引,如果where条件中已经使用了索引,那么where后面跟的order by不会使用索引。

4、不要在索引做运算,否则会导致索引失效。

5、索引只对以下操作符有效:<,<=,=,>,>=,between,in,不以通配符%或_开头的like


创建索引


CREATE (不指定/UNIQUE/FULLTEXT) INDEX index_name ON table(column(length));


例如:为名称为public_cloud_bill的表中product_detail字段添加单一索引
CREATE INDEX index_product_detail ON public_cloud_bill(product_detail(50));

例如:为名称为public_cloud_bill的表中bill_cycle、cloud_id、comment1字段添加复合索引
CREATE INDEX index_billcyle_cloudid_comment1 ON public_cloud_bill(bill_cycle,cloud_id,comment1);

删除索引


drop index index_name on table_name;

例如:删除名称为public_cloud_bill的表中名称为index_product_detail的单一索引
drop index index_product_detail on public_cloud_bill;

查看表中所有索引


SHOW INDEX FROM public_cloud_bill;

 

经过大半天的研究学习,我觉得在使用索引的时候,需要注意的是,如果用到复合索引,那么一定要严格遵循最左前缀原则,否则我们建的索引可能并不会生效。我是根据我SQL的查询条件顺序,建的符合索引,有了索引之后感觉速度会有提升,因为我现在数据量较小,差不多4000条数据,我测试了一下,加索引之后,速度提升大约200毫秒吧,后期数据量大的时候会更加明显。

 

 

~又是因为一点小收获窃喜的一天 (☄⊙ω⊙)☄

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值