数据库查询优化-添加索引

在数据库中,我们通过创建索引可以大大提高查询的速度,一个好的索引可以另SQL的查询更加效率。而一个错误的索引不仅带不来效率的提高,甚至会带来额外的系统开销

索引的基本操作
创建索引
建表时创建索引

建表的时候指定

CREATE TABLE user(
       ID INT NOT NULL, 
       username VARCHAR(16) NOT NULL, 
       INDEX [indexName] (username(length))
);
1
2
3
4
5
CREATE创建索引

为已有的表添加

CREATE INDEX indexName ON user(username(length));
1
主键索引

该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL

ALTER TABLE user ADD PRIMARY KEY (ID)
1
唯一索引

这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)

ALTER TABLE user ADD UNIQUE indexName (username)
1
普通索引

添加普通索引,索引值可出现多次

ALTER TABLE user ADD INDEX indexName (username)
1
全文索引

该语句指定了索引为 FULLTEXT ,用于全文索引。仅可用于 MyISAM 表,
用于在一篇文章中,检索文本信息的。

ALTER TABLE user ADD FULLTEXT indexName (username)
1
联合索引

组合索引(包含多列的索引,与单行索引相对),遵循最左原则

ALTER TABLE user ADD INDEX indexName ( `column1`, `column2`, `column3` )
1
删除索引
DROP INDEX indexName ON user;
1
修改索引
alter TABLE user add INDEX indexName on(username(length))
1
查询索引信息
使用 show index 命令来列出表中的相关的索引信息。可以通过添加 \g 来格式化输出信息。

SHOW INDEX FROM user
1
使用索引
使用索引时候需要注意的

LIKE关键字匹配’%‘开头的字符串,不会使用索引,但是以’%'结尾的可以。
OR关键字的两个字段必须都是用了索引,该查询才会使用索引。
使用多列索引必须满足最左匹配.
数据库索引的原理
一般来说数据库索引是使用B+tree的数据结构

使用B+树,并不是二叉树而是指的平衡树,它可以根据键值快速找到数据。B+树索引通过键值可以快速定位数据行所在的页,然后数据库通过页内容读入内存,而在内存中定位到数据。

数据库索引可以实现效果

可以避免进行数据库全表的扫描,大多数情况,只需要扫描较少的索引页和数据页。
对于非聚集索引,有时不需要访问数据页即可得到数据。
聚集索引可以避免数据插入操作,集中于表的最后一个数据页面。
在某些情况下,索引可以避免排序操作。
无索引的查询中,没有使用索引的情况下扫描每个记录来查找符合条件的记录。

数据库索引的不足
数据库索引使用了空间换时间的策略,建立的索引会占用磁盘空间。随着数据的增加,索引文件会膨胀很快。
数据库不仅需要保存数据还需要保存索引文件,这就导致对表进行更新或者删除操作的时候速度降低。
索引越多会让数据更新操作的时候变得更慢,不合理的索引会拖慢数据库的整体效率。
创建索引的原则
主键列默认使用了索引
假如有外键定义也需要建立索引
经常被作为查询条件的列最好建立索引
经常需要被排序、分组的字段建立索引,如果是复合索引,则需要排序、分组的顺序和索引顺序一致
极少作为查询条件、或者数据存在大量重复的列不需要建立索引
对于数据较多的字段,最好不要建立索引
经常被修改的字段,最好不要建立索引
多表连接查询的时候,连接字段上应该建立索引
频繁被修改的表,最好不要建立太多的索引
检查索引,删除无用的索引
正确算是创建复合索引
对于复合索引,第一个字段应该是使用频率最高的字段
复合索引中的几个字段,需要经常以AND方式出现在条件语句中,否则不需要创建复合索引
复合索引中的字段不宜过多(3个及以下)
一个字段有单独查询也有关联查询,一般来说创建单独索引而不需要创建复合索引
————————————————
转载:https://blog.csdn.net/qq330983778/article/details/100086830

                众览群雄,唯我杭城独秀——一贴汇总杭州校区所有就业薪资

猜你喜欢

转载自www.cnblogs.com/zhuxiaopijingjing/p/12262853.html