Historically, adding or dropping an index on a table with existing
data could be very slow. The CREATE INDEX
and DROP INDEX
statements worked by creating a new, empty table defined with the
requested set of indexes, then copying the existing rows to the
new table one-by-one, updating the indexes as the rows are
inserted. After all rows from the original table were copied, the
old table was dropped and the copy was renamed with the name of
the original table.
In InnoDB, the rows of a table are stored in a clustered (or primary key) index, forming what some database systems call an “index-organized table”. Changing the clustered index still requires copying the data. The performance speedup applies only to secondary indexes.
This new mechanism also means that you can generally speed the overall process of creating and loading an indexed table by creating the table with only the clustered index, and adding the secondary indexes after the data is loaded.
No syntax changes are required in the CREATE INDEX
or
DROP INDEX
statements. However, there are some considerations of
which you should be aware (see
Section 13.7.2.6, “Limitations of Fast Index Creation”).