【MYSQL学习笔记01】MySQL的数据索引Index

最近学习MySQL的索引,以下是一点学习心得与总结:
我们都知道,在java的语法中,index指数组中的下标;但在MySQL中,index的意思是索引。

1. 何为索引

MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。
解构这句话,分析和总结一下信息点,即:
索引,就是一种排好序,用于高效快速查找数据的,数据结构

详解:
数据库=数据+数据结构;
在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据;
这样就可以在这些数据结构上实现高级查找算法。
而这种数据结构,就是索引。

如果把MySQL比作一本书,那么,数据库就是封皮,索引就是目录页,数据就是书的正文页;

一般来说,索引本身也很大,所以它往往以索引文件的形式存储在磁盘中;

2. MySQL索引结构

我们平常所说的索引,如果没有特别指明,都是指B树结构组织的索引(BTREE,即Balance Tree,多路平衡查找树,一般是二分的,但是也不一定);
ps:关于B树、二叉树、B-树、B+树的数据结构区别,会另写一篇博文总结。

另外在开发中,常用索引结构还有Hash索引、full-text全文索引、R-Tree索引;由于这些都与DBA(数据库管理)无关,不概述。

3. MySQL索引分类

(1)单值索引
即一个Index中只包含单个字段(列),一个table中可以有多个单值索引;

(2)唯一索引(UNIQUE)
指Index中字段的值,必须唯一(字段列的值不允许重复),但允许是null(即字段列中只有一个值是null的情况下);但唯一索引字段列中有null,会降低效率,工作中一般不推荐使用;
ps: PRIMARY KEY AUTO_INCREMENT,自增主键天生就是单值且唯一索引;

ps:数据库中null和空是两码事,空是’‘表示(单引号间没有空格);
null占空间,空是不占空间的;
在创建字段列时若DEFAULT NOT NULL,那么该字段可以插入’’,但不可以插入null;

(3)复合索引
即一个Index中包含多个字段(列)。

4. MySQL索引基本语法

(1)创建索引([]表示可省略)
① 直接创建

CREATE  [UNIQUE ] INDEX indexName ON mytable(col01,col02,col03......); 

在表mytable中,创建(唯一)复合索引,索引名indexName,索引字段是col01,col02,col03…

② 修改表的同时创建

ALTER TABLE 表名 ADD  [UNIQUE ]  INDEX [indexName] ON (columnname(length)) 

修改表,在表中加入(唯一)索引,索引名indexName,索引字段是columnname(length);

(2)删除索引

DROP INDEX [indexName] ON mytable; 

(3)查看索引

SHOW INDEX FROM 表名\G

ps:/G是将显示结果由横排转竖排显示

(4)使用ALTER命令添加数据表的索引
有3种方式来添加数据表的索引:

ALTER TABLE tbl_name ADD PRIMARY KEY (column_list):
该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。

ALTER TABLE tbl_name ADD UNIQUE index_name (column_list):
这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。

ALTER TABLE tbl_name ADD INDEX index_name (column_list):
添加普通索引,索引值可出现多次。

猜你喜欢

转载自blog.csdn.net/wx1528159409/article/details/83793936