在MySQL中同时添加多个索引

12

在对MySQL进行测试时,我想要给一个拥有超过5000万行的表添加多个索引。 MySQL支持同时为不同列添加两个索引吗?如果可以,我需要打开两个会话还是可以通过一条命令完成?

3个回答

26

是的。但是...

在旧版本中,请使用

ALTER TABLE tbl
    ADD INDEX(...),
    ADD INDEX(...);

这样它就可以在一次操作中完成所有工作。

在更新的版本中,ALGORITHM=INPLACE 使得对于InnoDB表,工作可以在“后台”完成,从而对其他处理产生较小的影响。但是,为了获得INPLACE处理,您可能需要单独添加每个索引。[请查阅手册以获取特定语法;自我回答撰写6年多以来,已经有很多变化。此外,MySQL和MariaDB并不同步。]

参考手册 [参考手册]参考手册列出了一些注意事项,例如如何处理PRIMARY KEY


知道就好。我想了解的另外一个信息是,如果我们想要将某一列修改为主键自增列,那么以下命令是否能确保自增值从第一条记录开始: ALTER TABLE table1 modify column content_id bigint(20) AUTO_INCREMENT primary key;? - mugurelf
添加主键需要重写表(这是一种较慢的方法)。是的,您可以(应该为了速度)在单个ALTER中完成所有操作:ALTER TABLE tbl MODIFY ... ADD PRIMARY KEY (...), ADD INDEX ..., etc; - Rick James
如果 content_id 已经有数据,你是否正在添加 AUTO_INCREMENTPRIMARY KEY? 它已经是 BIGINT 类型了吗?(请向我们展示 SHOW CREATE TABLE - Rick James
创建表 table1 ( content_id bigint(20) unsigned NOT NULL , pid int(11) unsigned NOT NULL, status int(11) unsigned NOT NULL DEFAULT '0', datecreated datetime DEFAULT NULL, datemodified datetime DEFAULT NULL, ) ENGINE=InnoDB DEFAULT CHARSET=utf8; - mugurelf
表有多大?MAX(content_id)是什么?根据迄今为止的建议,您的初步ALTER是什么? - Rick James

3

在创建表格时添加时间字段很有用,可以通过以下方式完成:

CREATE TABLE name_of_a_new_table (col1 variable_type_1, col2 variable_type_2,
       INDEX idx_col1 (col1), INDEX idx_col2 (col2));

-1

谢谢提供链接,我会测试并回复您的。 - mugurelf
@Peter Mortensen:我提交了修复URL的编辑请求,但我在我的活动中没有看到该条目。发生了什么事? - realPK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接