原文链接

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'

表复制和锁选项

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

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

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

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