MySQL教程 - 索引(Index)
更新记录
转载请注明出处。
2022年9月2日 发布。
2022年9月2日 从笔记迁移到博客。
索引
说明#
是一种对数据表的一列或多列进行排序的数据结构
索引是单独的、存储在磁盘上的数据库结构
索引包含对表中记录的指针
索引的作用#
提高查询速度
索引的缺点#
占用磁盘空间、DML操作插入和更新速度减慢,随着数据增加越明显
索引与表#
每个表支持16个索引,最小长度为256字节
索引与存储引擎#
MySQL中索引的内部存储类型有 B-Tree 和 HashTable
InnoDB、MyISAM引擎只支持B-Tree
Memory引擎默认为HashTable,支持两种类型
索引分类#
普通索引#
普通索引是MySQL中的基本索引类型,允许在定义索引的列中插入重复值和空值
唯一索引#
索引列的值必须要唯一,但允许有空值
主键是一种特殊的唯一索引,不可以为空
使用UNIQUE关键字定义唯一索引
主键索引#
是一种特殊的唯一索引,不允许有空值,一张表只能有一个
组合索引#
在表的多个字段组合上创建的索引
只有在查询条件中使用了这些字段左边的字段时索引才会被使用
索引列的组合必须唯一
单列索引#
单个列上的索引
全文索引#
支持在文本中全文查找值
只可以在CAHR、VARCHAR、TEXT类型上使用
只有MyISAM支持
允许在这些索引列中插入重复值和空值
只有MyISAM支持
空间索引#
MySQL在5.7之后版本支持空间索引,而且支持OpenGIS几何数据模型
只有MyISAM支持
对空间数据类型字段建立索引
空间数据类型有4中,分别是,geometry,point,linesteing和polygon.
使用spatial关键字进行扩展
必须将其声明为not null
使用索引注意#
索引不是越多越好
经常查询的表可以使用索引
避免对经常更新的表进行过多的索引
数据量小的表可以不用索引
在表达式中经常用到的不同值较多的字段建立索引
在频繁排序或分组的字段上建立索引
创建常规索引#
CREATE TABLE table_name
(
[UNIQUE | FULLTEXT | SPATIAL] INDEX <索引名>
(字段 [(索引长度)] [ASC | DESC],...)
);
或者
ALTER TABLE 表名
ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX <索引名>
(列名.. [(索引长度)] [ASC | DESC]);
或者
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX <索引名>
ON 表名(字段 [(索引长度)] [ASC | DESC],...);
创建唯一索引
CREATE UNIQUE INDEX user_index
ON user (id);
删除索引#
ALTER TABLE 表名 DROP INDEX <索引名>;
或者
DROP INDEX <索引名> ON 表名;
删除主键索引
ALTER TABLE <表名> DROP PRIMARY KEY;
查看索引#
SHOW INDEX FROM 表名;
查询结果解释:
字段名 | 解释 |
---|---|
table | 表示创建索引的表 |
non_unique | 表示索引非唯一 1代表是非唯一索引 0代表唯一索引 |
key_name | 表示索引名称 |
seq_in_index | 字段在索引的位置 |
column_name | 表示定义索引的列字段 |
sub_part | 表示索引的长度 |
null | 表示该字段是否能为空值 |
index_type | 表示索引类型 |
作者:重庆熊猫
出处:https://www.cnblogs.com/cqpanda/p/16648542.html
版权:本作品采用「不论是否商业使用都不允许转载,否则按3元1字进行收取费用」许可协议进行许可。
本文来自博客园,作者:重庆熊猫,转载请注明原文链接:https://www.cnblogs.com/cqpanda/p/16648542.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构