索引的概念

索引(Index)是帮助MySQL高效获取数据的数据结构,通俗来讲索引就好比书本的目录,加快数据库的查询速度。

索引的作用

1.提高查询效率

2. 消除数据分组、排序

3.避免“回表”查询(索引覆盖)

4.优化聚合查询

5. 用于多表JOIN关联查询

6.利用唯一性约束,保证数据唯一性

7.InnDB行锁实现

索引的副作用

1.增加I/O成本

2.增加磁盘空间

3.不合适的索引或索引过多,会降低增删改的效率

建立索引的原则

1) 定义主键的数据列一定要建立索引。

2) 定义有外键的数据列一定要建立索引。

3) 对于经常查询的数据列最好建立索引。

4) 对于需要在指定范围内的快速或频繁查询的数据列;

5) 经常用在WHERE子句中的数据列。

6) 经常出现在关键字order by、group by、distinct后面的字段,建立索引。

    如果建立的是复合索引,索引的字段顺序要和这些关键字后面的字段顺序一致,否则索引不会被使用。

7) 对于那些查询中很少涉及的列,重复值比较多的列不要建立索引。

8) 对于定义为text、image和bit的数据类型的列不要建立索引。

9) 对于经常存取的列避免建立索引

10) 限制表上的索引数目。对一个存在大量更新操作的表,所建索引的数目一般不要超过3个,最多不要超过5个。

     索引虽说提高了访问速度,但太多索引会影响数据的更新操作。

11) 对复合索引,按照字段在查询条件中出现的频度建立索引。在复合索引中,记录首先按照第一个字段排序。

      对于在第一个字段上取值相同的记录,系统再按照第二个字段的取值排序,以此类推。

索引创建

1.create方式创建索引:

普通索引

CREATE INDEX index_name ON table_name(column_name,column_name) include(score)

非空索引

CREATE UNIQUE INDEX index_name ON table_name (column_name) ;

主键索引

CREATE PRIMARY KEY INDEX index_name ON table_name (column_name) ;

2.alter方式创建索引

alter table table_name add index index_name (column_list) ;
alter table table_name add unique (column_list) ;
alter table table_name add primary key (column_list) ;

删除索引

1.drop方式删除索引

drop index index_name on table_name ;

2.alter方式删除索引

alter table table_name drop index index_name ;
alter table table_name drop primary key ;

 索引的使用

索引使用时满足最左前缀匹配原则,即对于组合索引(col1, col2),在不考虑引擎优化时,条件必须是col1在前col2在后,或者只使用col1,索引才会生效;
索引不包含有NULL值的列
一个查询只使用一次索引,where中如果使用了索引,order by就不会使用
like做字段比较时只有前缀确定时才会使用索引
在列上进行运算后不会使用索引,如year(start_time)<2020不会使用start_time上的索引

Logo

本社区面向用户介绍CSDN开发云部门内部产品使用和产品迭代功能,产品功能迭代和产品建议更透明和便捷

更多推荐