赞
踩
1.普通索引
2.唯一性索引
3.全文索引
4.单列索引
5.多列索引
6.空间索引
UNIQUE:(unique),可选参数,表示索引为唯一索引。
FULLTEXT:(fulltext) ,可选参数,表示索引为全文索引。
SPATIAL:(spatial) ,可选参数,表示索引为空间索引。
INDEX | KEY:(index | key), 必选参数,用于指定字段为索引的,用户在选择时,只需要二选一即可。
[索引名]:可选参数,其作用是给创建的索引取新名称。(起到方便使用的目的)
被选定的字段名:必选参数,被用作索引的对应的字段名称,该字段必须被预先定义。
长度:可选参数,其指索引的长度,必须是字符串类型才可以使用。(比如:电话号码)
[ASC | DESC]:(asc | desc),可选参数,ASC 表示升序排列,DESC 表示降序排列。
创建普通索引,不需要添加 [UNIQUE | FULLTEXT | SPATIAL ] 等任何参数进行约束。
例:创建的表名为 score 的数据表,并在该表的 id 字段上建立名称为 score_id 的 ’ 普通索引 ',SQL语句如下:
score表的结构:
可以看出,id 字段上已经创建了一个名称为 score_id 的索引。
score表中id=1的数据的整个执行计划:
possible_keys 和 key 的值都为 score_id,说明 score_id 索引已经存在,并且已经开始被使用了。
注意:若设定了主键 primary key
score表的结构:
可以看出,id 字段上已经创建了一个名称为 score_id 的索引和 PRIMARY 的主键。
score表中id=1的数据的整个执行计划:
说明 score_id 索引已经存在,但已经开始被使用的是 PRIMARY 的主键。
创建唯一索引时,使用 UNIQUE 参数对 INDEX | KEY 进行约束。
全文索引只能作用在 CHAR、VARCHAR、TEXT、类型的字段上。创建全文索引需要使用 FULLTEXT 参数进行约束。
创建单列索引,即在数据表的单个字段上创建索引。创建该类型索引不需要引入约束参数,用户在建立时只需要指定单列字段名,即可创建单列索引。
创建多列索引,即在数据表的多个字段上创建索引。与上述单列索引类似,创建该类型索引不需要引入约束参数。
例:组合(复合)索引 —(‘最左前缀’原则)
针对 title 和 time 建立一个组合索引:alter table info add index index_title_time
(title
(50),time
(10))。建立这样的组合索引,其实是相当于分别建立了下面两组组合索引:
–title,time
–title
为什么没有time这样的组合索引呢?这是因为MySQL组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这两列的查询都会用到该组合索引,如下面的几个SQL所示:
使用到上面的索引:
SELECT * FROM article WHREE title=‘测试’ AND time=1234567890;
SELECT * FROM article WHREE title=‘测试’;
–不使用上面的索引
SELECT * FROM article WHREE time=1234567890;
创建空间索引,需要添加 SPATIAL 参数进行约束。
同样,必须说明的是,只有 MyISAM 类型的表支持该类型 ‘ 空间索引 ’。而且,索引字段必须有非空约束。
创建的表名为 list 的数据表,并在该表的 goods 字段上建立名称为 listinfo 的空间索引,这里 goods 字段有非空约束,符合条件,SQL 语句如下:
注意: goods 字段上已经建立名称为 listinfo 的空间索引,其中 goods 字段必须不能为空,且数据类型是 GEOMETRY,该类型是空间数据类型。
空间类型不能用其他类型代替,否则在生成空间素引时会产生错误且不能正常创建该类型索引。
外键索引:如果为某个外键字段定义了一个外键约束条件,MySQL就会定义一个内部索引来帮助自己以最有效率的方式去管理和使用外键约束条件。
参照两者区别:
1). key :是数据库的物理结构,它包含两层意义:一是约束(偏重于约束和规范数据库的结构完整性)、二是索引(辅助查询用的)。包括primary key, unique key, foreign key 等。
primary key 有两个作用,一是约束作用(constraint),用来规范一个存储主键和唯一性,但同时也在此key上建立了一个index;
unique key 也有两个作用,一是约束作用(constraint),规范数据的唯一性,但同时也在这个key上建立了一个index;
foreign key也有两个作用,一是约束作用(constraint),规范数据的引用完整性,但同时也在这个key上建立了一个index;
2). index:是数据库的物理结构,它包含一层意义:它只是索引(辅助查询用的),它创建时会在另外的表空间(mysql中的innodb表空间)以一个类似目录的结构存储。
因此,索引只是索引,它不会去约束索引的字段的行为(那是key要做的事情)。
3). 最后的释疑:
1. 我们说索引分类,分为主键索引、唯一索引、普通索引(这才是纯粹的index)等,也是基于是不是把index看作了key。
比如 create table t(id int, unique index inx_tx_id (id)); — index当作了key使用,因为前面的 unique 赋予了 ‘约束’,使其具有和 key 一样的作用。
2. 最重要的也就是,不管如何描述,理解index是纯粹的index,还是被当作key,当作key时则会有两种意义或起两种作用。
https://blog.csdn.net/qq_41573234/article/details/80250279 + https://blog.csdn.net/chang_ge/article/details/79849634 + https://www.cnblogs.com/jianmingyuan/p/6740090.html + https://www.cnblogs.com/songzhixue/p/11160201.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。