可以在创建表的时候增加索引,也可以在已有的表上增加索引。
在创建的表中,首先设置PRIMARY KEY
,然后是所有UNIQUE
索引,然后是非唯一索引。这有助于 MySQL 优化器优先使用哪个索引,也可以更快地检测重复UNIQUE。
key = index
普通索引:没有限制
唯一索引:必须唯一,但是可以为空,有前缀的的时候列值要在前缀长度内唯一(多个值的时候,其中任何值都可以为空)
主键索引:必须唯一,且不能为空(主键等属于索引,等同于主键索引)
全文索引:它们只能从CHAR、 VARCHAR和 TEXT列中创建,且只支持整个列索引。
空间索引:空间数据类型
1.创建表的时候用key作为索引:
CREATE TABLE esdb_part.t_test (
`id` int(10) COMMENT 'id',
`user_name` varchar(64) comment '用户名',
`sex` int(10) comment '性别',
`password` int(10) comment '密码',
`brithday` int(10) comment '生日',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY idx1 (`user_name`,`sex`),
UNIQUE KEY `idx2` (`user_name`,`sex`),
KEY `idx3` (`brithday`)
) ENGINE=InnoDB AUTO_INCREMENT=4439 DEFAULT CHARSET=utf8 COMMENT='test表';
查看索引:
show index from esdb_part.t_test;
2.创建表时用index创建索引
CREATE TABLE esdb_part.t_test (
`id` int(10) COMMENT 'id',
`user_name` varchar(64) comment '用户名',
`sex` int(10) comment '性别',
`password` int(10) comment '密码',
`brithday` int(10) comment '生日',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
primary key (`id`),
index idx1 (`id`),
unique index idex2 (`user_name`,`sex`),
index idx33 (`brithday`)
) ENGINE=InnoDB AUTO_INCREMENT=4439 DEFAULT CHARSET=utf8 COMMENT='test表';
查看索引:
3.在已有的表中增加索引
CREATE TABLE esdb_part.t_test (
`id` int(10) COMMENT 'id',
`user_name` varchar(64) comment '用户名',
`sex` int(10) comment '性别',
`password` int(10) comment '密码',
`brithday` int(10) comment '生日',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB AUTO_INCREMENT=4439 DEFAULT CHARSET=utf8 COMMENT='test表';
create unique index idx1 on esdb_part.t_test(`id` );
create index idx2 on esdb_part.t_test(`user_name` );
查看索引