从常规表传递索引到临时表?

JD *_*cks 5 mysql indexing temp-tables

我正在创建一个带有如下查询的临时表:

CREATE TEMPORARY TABLE temp_table
SELECT * FROM regular_table
WHERE 1
Run Code Online (Sandbox Code Playgroud)

但是regular_table在某些字段上有FULLTEXT索引.我尝试在新的临时表上进行FULLTEXT搜索,我收到一条错误,告诉我"无法找到与列列表匹配的FULLTEXT索引 ".因此,索引不会复制到新表.有没有办法强迫这个?

谢谢.

Pis*_*3.0 10

您可以使用CREATE TEMPORARY TABLE temp_table LIKE regular_table,但这将创建所有索引,因此当您这样做时INSERT INTO temp_table SELECT * FROM regular_table,将重建索引 - 这可能会很长.

或者,您可以创建表并在之后添加索引:

CREATE TEMPORARY TABLE temp_table
ALTER TABLE temp_table ADD FULLTEXT INDEX (foo,bar,baz)
INSERT INTO temp_table SELECT * FROM regular_table
Run Code Online (Sandbox Code Playgroud)

但是,每次插入时都会更新索引.

可能最有效的方法是创建临时表,然后插入所有,构建索引:

CREATE TEMPORARY TABLE temp_table
ALTER TABLE temp_table ADD FULLTEXT INDEX (foo,bar,baz)
ALTER TABLE temp_table DISABLE KEYS
INSERT INTO temp_table SELECT * FROM regular_table
ALTER TABLE temp_table ENABLE KEYS
Run Code Online (Sandbox Code Playgroud)

同样,您将不得不等待索引构建,除非它将在最后一个ALTER语句的一个块中发生.