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`;
文章插图
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`;
文章插图
前面两个索引都是通过主键和唯一约束自动创建的
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));
文章插图
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));
文章插图
5、创建空间索引
create table test.test(position geometry not null,spatial index idx1(position));
show index from test.test;
文章插图
推荐阅读
- 小米无缘手机好评榜!不止小米11!看来卢伟冰有一句话说错了
- 不止有Mate40,另一张“底牌”也被曝光,华为也是迫不得已
- 不止业务合作而是“全面支持”获富士康支持拜腾“重回赛道”
- 打乱全球供应链!每年损失千亿?美对华芯片封锁的后果不止这些
- 华为P50战斗不止,6.1英寸小屏+联发科5nm芯片,支持吗
- 手机手电筒不止是能照明,其实还有很多隐藏功能
- 基于Spring+Angular9+MySQL开发平台
- 不止32核 苹果自研ARM芯片或将达到64核
- 手机行业将迎“变革”?华为P50消息流出,不止有鸿蒙
- 不止玩游戏!肯德基也要出主机:还能做烤鸡?