MySQL的create index和alter add index之间有什么区别?

37
我有一个名为"data"的表格,其中有列"id"(字符型)、"text"(字符型)和"date"(日期型)。在mysql中创建索引时,我使用heidiSQL。
当我右键点击该列并选择创建新索引(key)时,代码显示它正在使用alter table data add index 'index1' ('id,date(10)') 这样做和create index index1 on data ('id,date(10)')之间有什么区别?
1个回答

59

在服务器端,实现方式是相同的。

唯一的区别是,使用CREATE INDEX语法时,必须指定索引的名称。

而在ALTER TABLE中,可以指定索引的名称,但这并非必须。

如果您未指定名称,则服务器会生成一个默认名称,作为索引中第一列的名称,必要时附加数字后缀。


此外,对于大型表(几百万条记录),使用“CREATE INDEX语法”更加高效。 - Vladimir Ch
@VladimirCh,你有证据证明你已经测量过了吗?我认为这两个语句执行的工作完全相同,所以无论表的大小如何都不应该有区别。 - Bill Karwin
我在10多万条记录上进行了测试,当执行“Alter Table…”查询时,程序被冻结了。但是“create index…”请求经过一段时间后成功执行,当然,这只是一次性的执行,所以我没有证据。在MYSQL 5.6 - Percona上执行。 - Vladimir Ch
我建议您尝试重复测试。有可能 ALTER TABLE 正在等待访问该表。如果任何其他会话在该表上持有元数据锁定的事务,则 ALTER TABLE 和 CREATE INDEX 都无法启动。 - Bill Karwin
或者第一次测试花费了额外的时间加载数据;第二次测试发现所有的数据都被缓存在内存中。 - undefined
CREATE INDEX 被映射为 ALTER TABLE 语句以创建索引。https://dev.mysql.com/doc/refman/5.7/en/create-index.html - undefined

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