原文链接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE [ONLINE | OFFLINE] [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name
[index_type]
ON tbl_name (key_part,...)
[index_option]
[algorithm_option | lock_option] ...

key_part:
col_name [(length)] [ASC | DESC]

index_option:
KEY_BLOCK_SIZE [=] value
| index_type
| WITH PARSER parser_name
| COMMENT 'string'

index_type:
USING {BTREE | HASH}

algorithm_option:
ALGORITHM [=] {DEFAULT | INPLACE | COPY}

lock_option:
LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE}

通常,你可以在使用 CREATE TABLE 创建表时创建所有索引。这条准则对 InnoDB 表尤其重要,其中主键决定数据文件中行的物理布局。CREATE INDEX 则可以向现有表添加索引。

CREATE INDEX 被映射到一个 ALTER TABLE 语句去创建索引。参阅 《ALTER TABLE Statement》CREATE INDEX 不能用于创建主键,有关索引的更多信息参阅 《How MySQL Uses Indexes》

innodb_stats_persistent 设置被启用时,为 InnoDB 创建一个索引后会运行 ANALYZE TABLE 语句

(key_part1, key_part2, ...) 用法可以创建一个包含多关键部分的索引。索引键值通过将给定键的值连接而成。

key_part 规范可以以 ASC 或 DESC 结束。这些关键字允许用于以后指定升序或降序索引值存储的扩展。目前,他们被解析但被忽略,索引值总是按升序存储的

列前缀


TODO:

唯一索引

全文索引

空间索引

索引选项

  • KEY_BLOCK_SIZE [=] value
  • index_type
  • WITH PARSER parser_name
  • COMMENT 'string'

表复制和锁选项

修改表索引时,可能会给出 ALGORITHMLOCK 子句来影响表的复制方法和读写表的并发级别。他们的含义与 ALTER TABLE 语句相同,更多信息参阅 《ALTER TABLE Statement》

在 NDB 集群表的可变宽度列上在线创建索引无需任何表复制。该表没有针对其他 NDB 集群 API 节点的访问进行锁定,尽管在操作期间针对同一 API 节点上的其他操作会进行锁定。这是由服务器自动完成的,只要它认为有可能这样做,你不需要使用任何特殊的 SQL 语法或服务器选项使其发生。

在标准的 MySQL 5.6 版本中,当服务器决定在不复制表的情况下创建索引时,其不可能被覆盖。在 NDB 集群中,你可以使用 OFFLINE 关键词创建索引(这回导致表被锁定到集群中的所有 API 节点)。管理 CREATE OFFLINE INDEXCREATE ONLINE INDEX 的规则和限制与 ALTER OFFLINE TABLE ... ADD INDEXALTER ONLINE TABLE ... ADD INDEX 相同。你不能通过 ONLINE 关键词来创建通常在脱机情况下创建的索引:如果在不复制表的情况下无法执行 CREATE INDEX 操作,啧服务器将忽略 ONLINE 关键词。更多信息参阅 《Online Operations with ALTER TABLE in NDB Cluster》

ONLINEOFFLINE 关键词仅在 NDB 集群中可用;试图在标准 MySQL Server 5.6 版本中使用这些关键词户导致语法错误。MySQL NDB Cluster 7.3 废弃 ONLINEOFFLINE 关键词,在 7.4 中仍然支持它们,但在未来的版本中可能会删除它们。