Optimizing and analyzing
In our storage engine, even deleted rows take space, and if the table is regularly updated, it will grow even if the number of rows does not increase. It would be nice to implement OPTIMIZE TABLE
so that users could have a simple tool to reclaim the unused space. Luckily, there is a very easy shortcut, we almost do not need to do anything:
int ha_html::optimize(THD* thd, HA_CHECK_OPT* check_opt) { return HA_ADMIN_TRY_ALTER; }
This tells MySQL that for our engine, OPTIMIZE TABLE xxx
should be mapped to ALTER TABLE xxx ENGINE=HTML
. That is, to optimize our table MySQL will create a new table with the same structure, copy all data over to it, and replace the old table with the new one. Nice, isn't it? Unfortunately, at least in MySQL 5.1.47 there is a bug that will cause our OPTIMIZE TABLE
to fail unless our engine can do ANALYZE TABLE
too. As a workaround we implement a dummy analyze()
that succeeds without actually doing anything:
int ha_html::analyze(THD* thd...