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 [=] 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 中仍然支持它们,但在未来的版本中可能会删除它们。