索引各类型创建

1. 普通索引

基本索引

创建方法

1
2
3
4
5
6
7
8
#标准语句: 
ALTER TABLE table_name ADD INDEX index_name (column_list)

CREATE INDEX index_name ON table_name (column_list);

#还有建表的时候创建亦
CREATE TABLE table_name ( ID INT NOT NULL, column_listVARCHAR(16) NOT NULL,
INDEX [index_name](column_list(length)) );
  • length 表示 length=10,索引字段记录前10个字符
  • BLOB和text类型,length不能短于实际长度。CHAR和VARCHAR可以

2. 唯一索引

彼此各不相同的值,必须唯一,可以空值,关键字UNIQUE

保证数据记录的唯一性

1
2
3
4
ALTER TABLE table_name ADD UNIQUE (column_list) 
CREATE UNIQUE INDEX index_name ON table_name (column_list)
#还有建表时创建
CREATE TABLE table_name ( ID INT NOT NULL, column_list VARCHAR(16) NOT NULL, UNIQUE [index_name ] (column_list(length)) );

3. 主键索引

特殊的唯一索引,不能有空值,常见于id

1
2
3
4
5
CREATE TABLE table_name ( 
ID INT NOT NULL,
[column] VARCHAR(16) NOT NULL,
PRIMARY KEY(ID)
);

4. 全文索引

建立索引在索引中搜索定位

注意

对于较大的数据集,将你的资料输入一个没有FULLTEXT索引的表中,然后创建索引,其速度比把资料输入现有FULLTEXT索引的速度更为快。

不过切记对于大容量的数据表,生成全文索引是一个非常消耗时间非常消耗硬盘空间的做法。插入修改删除表的同时也要针对索引做一系列的处理。

1
2
3
4
5
CREATE TABLE `table` ( 
`title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL , PRIMARY KEY (`id`),
FULLTEXT (content)
);

my5.7有了针对中文的全文索引插件

5.聚集索引和非聚集索引

百度经验给的例子

1
2
create CLUSTERED INDEX 索引名称 ON 表名(字段名) #创建聚集索引
create NONCLUSTERED INDEX 索引名称 ON 表名(字段名) #创建非聚集索引

6.单列索引和多列索引

最左匹配原则

适用场景

  1. 全字段匹配
  2. 匹配部分最左前缀
  3. 匹配第一列
  4. 匹配第一列范围查询(可用用like a%,但不能使用like %b)
  5. 精确匹配某一列和和范围匹配另外一列
    1
    2
    3
    4
    5
    6
    #假设只使用单列索引名字 
    ALTER TABLE people ADD INDEX name (name);
    #使用多列索引:
    #相当于创建了(height)单列索引,(height,name)组合索引以及height,name,age)组合索引
    ALTER TABLE people ADD INDEX height_name_age (height,name,age);
    #注意: 注:在mysql中执行查询时,只能使用一个索引,如果我们在name,age上分别建索引,执行查询时,只能使用一个索引,mysql会选择一个最严格(获得结果集记录数最少)的索引。

本文标题:索引各类型创建

文章作者:松子

发布时间:2018年10月25日 - 12:10

最后更新:2022年03月21日 - 23:03

博文链接:https://songzi.info/post/95bb5ff7/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%