Mysql不止CRUD,聊聊索引( 四 )

更详细说明见官网:
2.3、创建索引创建索引的语法(如下都是默认的innodb存储引擎):
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name[index_type]ON tbl_name (key_part,...)[index_option][algorithm_option | lock_option] ...key_part: {col_name [(length)] | (expr)} [ASC | DESC]index_option: {KEY_BLOCK_SIZE [=] value| index_type| WITH PARSER parser_name| COMMENT 'string'| {VISIBLE | INVISIBLE}| ENGINE_ATTRIBUTE [=] 'string'| SECONDARY_ENGINE_ATTRIBUTE [=] 'string'}index_type:USING {BTREE | HASH}algorithm_option:ALGORITHM [=] {DEFAULT | INPLACE | COPY}lock_option:LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE}可以在创建的表的时候建立索引 , 也可以对创建好的表建立索引 。
2.3.1、基于创建表时建立索引CREATE TABLE创建表时 , 除了可以定义列的数据类型 , 还可以定义主键约束、外键约束或者唯一性约束 , 而不论创建哪种约束 , 在定义约束的同时相当于在指定列上创建了一个索引 。
1、创建普通索引
CREATE TABLE test.`user2` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(50) DEFAULT NULL,`sex` varchar(5) DEFAULT NULL,`address` varchar(100) DEFAULT NULL,`birthday` datetime NOT NULL,PRIMARY KEY (`id`),index idx1(username));show index from test.`user2`;
Mysql不止CRUD,聊聊索引文章插图
2、创建唯一索引
CREATE TABLE test.`user2` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(50) DEFAULT NULL,`sex` varchar(5) DEFAULT NULL,`address` varchar(100) DEFAULT NULL,`birthday` datetime NOT NULL,`score_num` int(11) NOT NULL UNIQUE,PRIMARY KEY (`id`),unique index idx1(username));show index from test.`user2`;
Mysql不止CRUD,聊聊索引文章插图
前面两个索引都是通过主键和唯一约束自动创建的
3、创建组合索引
注意:最左前缀原则
CREATE TABLE test.`user2` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(50) DEFAULT NULL,`sex` varchar(5) DEFAULT NULL,`address` varchar(100) DEFAULT NULL,`birthday` datetime NOT NULL,`score_num` int(11) NOT NULL UNIQUE,PRIMARY KEY (`id`),index idx1(id,score_num,username));
Mysql不止CRUD,聊聊索引文章插图
4、创建全文索引
FULLTEXT全文索引可以用于全文搜索 , 并且只为CHAR、VARCHAR和TEXT列创建索引 。 索引总是对整个列进行 , 不支持局部(前缀)索引
CREATE TABLE test.`user2` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(50) DEFAULT NULL,`sex` varchar(5) DEFAULT NULL,`address` varchar(100) DEFAULT NULL,`birthday` datetime NOT NULL,`score_num` int(11) NOT NULL UNIQUE,PRIMARY KEY (`id`),fulltext index idx1(username));
Mysql不止CRUD,聊聊索引文章插图
5、创建空间索引
create table test.test(position geometry not null,spatial index idx1(position));show index from test.test;
Mysql不止CRUD,聊聊索引文章插图


推荐阅读