MySQL 索引简介
2022/4/16 19:12:33
本文主要是介绍MySQL 索引简介,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
索引的含义和特点
索引是创建在表上的,是对数据库表中一列或多列的值进行排序的一种结构,可以提高查询速度。使用索引类似于使用新华字典的音序表,通过提取拼音,可以快速定位该数据的位置
索引有其明显的优势,也有不可避免的缺点:
- 创建和维护索引同样需要耗费时间,并随着数据量的增加而增加
- 索引也会占用一定的物理空间
- 增加、删除和修改数据时,要动态地维护索引
索引的分类和操作
1. 普通索引
所谓普通索引,就是在创建索引时,不附加任何限制条件(唯一、非空等限制),可以创建在任何数据类型的字段上
创建表时直接创建索引
CREATE TABLE tablename( propname1 type1 [CONSTRAINT1], propname2 type2 [CONSTRAINT2], ...... INDEX|KEY [indexName] (propname1 [(length) [ASC|DESC]]) );
在已存在的表上通过 CREATE 语句创建索引
CREATE INDEX indexName ON tablename (propname [(length) [ASC|DESC]])
通过 ALTER TABLE 语句创建
ALTER table tablename ADD INDEX|KEY indexName(propname [(length) [ASC|DESC]])
2. 唯一索引
所谓唯一索引,就是在创建索引时,限制索引的值必须唯一,主键就是一种特殊的唯一索引
创建表时直接创建索引
CREATE TABLE tablename( propname1 type1 [CONSTRAINT1], propname2 type2 [CONSTRAINT2], ...... UNIQUE INDEX|KEY [indexName] (propname1 [(length) [ASC|DESC]]) );
在已存在的表上通过 CREATE 语句创建索引
CREATE UNIQUE INDEX indexName ON tablename (propname [(length) [ASC|DESC]])
通过 ALTER TABLE 语句创建
ALTER table tablename ADD UNIQUE INDEX|KEY indexName(propname [(length) [ASC|DESC]])
3. 全文索引
全文索引主要关联在 CHAR、VARCHAR 和 TEXT 字段上,以便能更加快速地查询数据量较大的字符串类型字段
创建表时直接创建索引
CREATE TABLE tablename( propname1 type1 [CONSTRAINT1], propname2 type2 [CONSTRAINT2], ...... FULLTEXT INDEX|KEY [indexName] (propname1 [(length) [ASC|DESC]]) );
在已存在的表上通过 CREATE 语句创建索引
CREATE FULLTEXT INDEX indexName ON tablename (propname [(length) [ASC|DESC]])
通过 ALTER TABLE 语句创建
ALTER table tablename ADD FULLTEXT INDEX|KEY indexName(propname [(length) [ASC|DESC]])
4. 多列索引
所谓多列索引,是指在创建索引时关联多个字段。虽然可以通过所关联的字段进行查询,但是只有查询条件中使用了所关联字段中的第一个字段,多列索引才会被使用
创建表时直接创建索引
CREATE TABLE tablename( propname1 type1 [CONSTRAINT1], propname2 type2 [CONSTRAINT2], ...... INDEX|KEY [indexName] (propname1 [(length) [ASC|DESC]], propname2 [(length) [ASC|DESC]], ......); );
在已存在的表上通过 CREATE 语句创建索引
CREATE INDEX indexName ON tablename (propname1 [(length) [ASC|DESC]], propname2 [(length) [ASC|DESC]], ......);
通过 ALTER TABLE 语句创建
ALTER table tablename ADD INDEX|KEY indexName(propname1 [(length) [ASC|DESC]], propname2 [(length) [ASC|DESC]], ......);
5. 删除索引
DROP INDEX indexName ON tablename;
索引的设计原则
- 选择唯一性索引,可以更快速地确定某条记录
- 为经常需要排序、分组和联合操作的字段建立索引
- 为经常需要作为查询条件的字段建立索引
- 限制索引的数目,索引越多,占用的空间就越多,修改表时对索引的重构和更新也很麻烦
- 尽量使用数据量少的索引,索引的值越长,查询速度也会受影响
- 尽量使用前缀来索引,对于 TEXT 和 BLOB 类型的字段,进行全文索引会很浪费时间,如果只检索字段前面的若干字段,可以提高速度
- 删除不再使用或很少使用的索引
这篇关于MySQL 索引简介的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-04-26MySQL查出时间比实际晚8小时的解决方案
- 2024-04-01JPA不识别MySQL的枚举类型
- 2024-03-30mysql数据库表卡死解决方法
- 2024-03-15MySQL多数据源笔记5-ShardingJDBC实战
- 2024-03-11natural join mysql
- 2024-03-11关于VS2017,VS2015 中利用 EF使用Mysql 不显示数据源问题解决方案
- 2024-02-26mysql 阿里云xb后缀备份文件恢复-icode9专业技术文章分享
- 2024-02-22docker mysql 5.7
- 2024-02-18从 20 多套 MySQL 到 1 套 TiDB丨骏伯网络综合运营管理平台应用实践
- 2024-02-07mysql 外键索引入门介绍,为什么工作中很少有人使用?