MySQL - CREATE INDEX Statement 翻译
原文链接
1 | CREATE [ONLINE | OFFLINE] [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name |
通常,你可以在使用 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 [=] valueindex_typeWITH PARSER parser_nameCOMMENT '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 中仍然支持它们,但在未来的版本中可能会删除它们。