在MySQL中添加索引,但仅在索引不存在时添加。

4
有没有一种方法可以仅在不存在索引的数据库中运行ADD INDEX?类似于根据SHOW INDEX ON的结果执行ADD INDEX。我们真的想避免在已经存在索引的情况下意外地添加额外的索引开销。

通常,添加索引是一项手动操作,针对给定的表只需执行一次。在添加索引之前进行检查似乎并不过分繁琐,尽管您可能可以编写存储过程来实现此操作。 - Gordon Linoff
谢谢Gordon,它需要运行在400多个数据库上,其中大部分已经有了,但是有几个是没有创建的。 - Jamie Abbott
1个回答

4

我猜你正在寻找类似于这样的内容:

CREATE INDEX IF NOT EXISTS index_name ON table(column)

很遗憾,mySql中没有这个功能。您可以使用存储过程(如Gordon Linoff所提到的)来检查索引是否存在,如果不存在则添加索引。

关于索引的信息可以在INFORMATION_SCHEMA中找到。

您可以执行以下查询来检查现有的索引:

SELECT COUNT(1) indexExists FROM INFORMATION_SCHEMA.STATISTICS
WHERE table_schema=DATABASE() AND table_name='mytable' AND index_name='index_name';

如果索引已存在,则返回1,否则返回0。您可以在存储过程中使用此语句来实现您想要的功能。
此外,请参阅这里获取更多信息。

谢谢Karthik,我想我最终会用PHP运行它,并使用两个单独的查询。 - Jamie Abbott
如果需要,您可以根据“column_name”而不是“index_name”进行查找。 - Alexey Burdin

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