Details
-
Type:
Bug
-
Status: Closed
-
Priority:
Critical
-
Resolution: Fixed
-
Affects Version/s: 5.5.36, 10.0.10
-
Fix Version/s: 10.0.12
-
Component/s: None
-
Labels:None
-
Environment:32-Bit Debian 7
Description
When adding or removing a non-materialized virtual column to/from a MyISAM table with ALTER TABLE, MariaDB recreates the whole table although only the metadata should be affected:
MariaDB [test]> ALTER TABLE test ADD COLUMN testcolumn INT AS (othercolumn+1) VIRTUAL; Stage: 1 of 2 'copy to tmp table' 0.001% of stage done
This is especially annoying for multi-gigabyte tables, where this operation takes a long time.
Gliffy Diagrams
Attachments
Issue Links
- relates to
-
MDEV-6303 MyISAM/Aria: Adding/removing non-materialized virtual column triggers table recreation
-
- Open
-
Activity
- All
- Comments
- Work Log
- History
- Activity
- Transitions
It came to be that MyISAM (and most probably Aria) reserves extra bits for virtual columns (NULL flag) in a physical record (the one that is written to disk). There should be no good reason to do so.
E.g.:
create table t1 (b int, d int); # Uses 2nd and 3rd bits for NULL flags
create table t2 (a int as (-b), b int, c int as (-b), d int); # Uses 3rd and 5th bits for NULL flags
All in all it means physical record format changes when adding/dropping virtual columns and just relaxing table comparison function is not enough to fix this bug.
I will attach partial fix for this bug shortly. InnoDB doesn't seem to be affected.