最近在做的模块数据量较大,且业务需求全部是查询,所以尝试通过添加索引来提升查询速度。既然学了就记下吧。
索引可以在很大程度上提升数据的检索速度。索引实际上也是一张表,这个表里会保存索引字段,并指向实体记录。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毫秒吧,后期数据量大的时候会更加明显。
~又是因为一点小收获窃喜的一天 (☄⊙ω⊙)☄