MySQL的索引(Index)详解
索引分类
(1)普通索引(Key Indexes)
(2)唯一索引(Unique Indexes)
(3)主键索引(Primary Key Indexes)
(4)组合索引(Composite Index)
(5)前缀索引( Prefix Indexes)
(6)全文索引(Full-Text Indexes)
(7)哈希索引(Hash Indexes)
(8)空间索引(Spatial Indexes)
普通索引
普通索引是最基本的索引,没什么限制,根据创建时机不同,主要有两种方式:
(1)在创建表时同时创建普通索引
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name
(col_name column_definition,INDEX|KEY [index_name] [index_type] (col_name [(length)] [ASC | DESC])
)index_type:USING {BTREE | HASH}
其中方括号[]中内容表示可选项,竖线|表示两者选一。
(1)col_name:列名;
(2)column_definition:列的具体定义,这里省略了;
(3)INDEX|KEY:表示使用INDEX和KEY都能创建普通索引,因为在MySQL中,INDEX和KEY是一样的。
(4)[index_name]:索引的名字,是可选项,如果没有写,默认使用字段名作为索引的名称,一般以idx_字段名作为前缀来命名;
(5)[index_type]:索引类型,表示索引的数据结构,有两类:BTREE和HASH,如果没有指明,默认是BTREE;
(6)col_name [(length)] [ASC | DESC]:col_name是要添加索引的列,length表示要在类型为字符串的列的前length个字符构成的字符串上添加索引,[ASC|DESC]表示升序还是降序方式存储索引,默认是升序方式存储;
例:
CREATE TABLE my_table
(
id INT(11) not NULL auto_increment,
name VARCHAR(20) NOT NULL,
address VARCHAR(20) NOT NULL,
PRIMARY KEY(id),
INDEX idx_name (name)
);
该语句在创建my_table表时,同时在字段name上创建了一个名为idx_name的的普通索引。
(2)创建表之后创建索引
——修改表结构的方式添加索引
ALTER TABLE table_name ADD INDEX index_name (col_name [(length)] [ASC | DESC])
例如:
ALTER TABLE my_table ADD INDEX idx_address (address)
该语句在my_table表的address字段上添加了名为idx_address的普通索引。
——直接创建索引
CREATE INDEX index_name ON table(column[(length)] [ASC|DESC])
例如:
CREATE INDEX idx_name ON my_table(name)
可以使用如下DDL语句删除索引:
DROP INDEX index_name ON my_table
唯一索引
与普通索引类似,不同的是要求索引列的值必须唯一,但是多个NULL值。与普通索引创建方式相似:
创建表时创建:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name
(col_name column_definition,UNIQUE [INDEX|KEY] [index_name] [index_type] (col_name [(length)] [ASC | DESC])
)index_type:USING {BTREE | HASH}
创建表后直接创建:
CREATE UNIQUE INDEX index_name ON table(column[(length)] [ASC|DESC])
修改表结构方式创建:
ALTER TABLE table_name ADD UNIQUE indexName (column(length))
主键索引
主键索引不需要主动取创建,表创建主键后,自动在主键上创建,主键索引名称总是为PRIMARY,主键值的唯一和非空也就保证了主键索引的列值必须唯一且不能为空,所以主键索引可以看成是特殊的唯一索引。
CREATE TABLE my_table
(
id INT(11) not NULL auto_increment,
name VARCHAR(20) NOT NULL,
address VARCHAR(20) NOT NULL,
PRIMARY KEY(id)
);
该语句在创建表时创建了主键id,同时会在id上创建主键索引,如图:
组合索引
指在多个字段上创建的索引,在多个字段上创建的普通索引和唯一索引都是组合索引,所谓组合实际是字段的组合,对于多个字段上的唯一索引,要求组合字段必须唯一。可以如下创建组合索引
CREATE TABLE my_table
(
id INT(11) not NULL auto_increment,
name VARCHAR(20) NOT NULL,
address VARCHAR(20) NOT NULL,
PRIMARY KEY(id),
INDEX idx_name_address (name,address)
);
该语句在字段name和address两个字段上创建普通索引,结果如图:
如果要在两个字段上创建唯一索引,只要将INDEX替换成UNIQUE即可。
也可以在创建表后创建组合索引
ALTER TABLE table_name ADD INDEX idx_name_address (name,address);
CREATE INDEX idx_name_address ON my_table(name,address)
前缀索引
全文索引
哈希索引
哈希索引是基于哈希表实现的,只有精确匹配索引中所有列的查询,哈希所有才有效。
MySQL的索引(Index)详解相关推荐
- MySQL 索引失效详解
MySQL 索引失效详解 一.MySQL索引失效原因汇总 隐式的类型转换,索引失效 查询条件包含or,可能导致索引失效 like通配符可能导致索引失效 查询条件不满足联合索引的最左匹配原则 在索引列上 ...
- 组合索引mysql语句_Mysql之组合索引方法详解
对于任何DBMS,索引都是进行优化的最主要的因素.对于少量的数据,没有合适的索引影响不是很大,但是,当随着数据量的增加,性能会急剧下降. 如果对多列进行索引(组合索引),列的顺序非常重要,MySQL仅 ...
- 【肝帝一周总结:全网最全最细】☀️Mysql 索引数据结构详解与索引优化☀️《❤️记得收藏❤️》
[肝帝一周总结:全网最全最细]☀️Mysql 索引数据结构详解与索引优化☀️<❤️记得收藏❤️> 目录
- MySQL索引原理详解
MySQL索引原理详解 索引的本质 索引的分类 Hash 索引 二叉树 B树(二三树) B+树 主键目录 索引页 索引页的分层 非主键索引 回表 索引的本质 索引的本质是一种排好序的数据结构. 索引的 ...
- 数据结构可视化与MySQL索引视频详解
数据结构 必看: 数据结构可视化:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html MySQL索引视频详解:https:// ...
- MySQL之SQL优化详解(二)
目录 MySQL之SQL优化详解(二) 1. SQL的执行顺序 1.1 手写顺序 1.2 机读顺序 2. 七种join 3. 索引 3.1 索引初探 3.2 索引分类 3.3 建与不建 4. 性能分析 ...
- MySQL高级之explain详解
MySQL高级之explain详解 文章目录 MySQL高级之explain详解 一.expalin命令详解 1.使用方式 2.结果显示 3.主要的字段信息 4.作用 二.id字段 三.select_ ...
- mysql查询优化explain命令详解
转载自 mysql查询优化explain命令详解 mysql查询优化的方法有很多种,explain是工作当中用的比较多的一种检查方式.explain翻译即解释,就是看mysql语句的查询解释计划,从解 ...
- mysql配置文件my.cnf详解
mysql配置文件my.cnf详解 basedir = path 使用给定目录作为根目录(安装目录). character-sets-dir = path 给出存放着字符集的目录. datadir = ...
- MySQL权限授权认证详解
MySQL权限授权认证详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL权限系统介绍 1>.权限系统的作用是授予来自某个主机的某个用户可以查询.插入.修改.删 ...
最新文章
- Exchange2010之资源邮箱
- 【NLP】探索NLP模型可解释性的7种姿势
- AC日记——字符替换 openjudge 1.7 08
- 还在为垃圾太难分类而烦恼么?AI算法来帮您!
- android显示矩阵大小,关于android:显示代表灰度图像的双值矩阵
- ORACLE的分布式管理
- 【Elasticsearch】elasticsearch 线程池以及相关配置
- Keil MDK下载程序时的相关设置
- 使用 Docker 打造超溜的前端环境
- 大数据分析的目的与意义
- 宥马运动服务器正在维护,宥马运动ios版
- ElementUI 中 栅格布局 混乱问题
- jqgrid 列排序
- 【内网安全-隧道技术】SMB、ICMP、DNS隧道、SSH协议
- 信息安全 数据赛 铁人三项_[信息安全铁人三项赛总决赛](数据赛)第二题
- php实现网站支付,php银联网页支付实现方法
- android打开图库,Android 7.0 以上通过系统图库打开图片的方法
- JavaScript和Node.js的关系
- 2015图片处理软件排行榜
- 软考备战之计算机专业词汇