0) Context
The database schemata of several tables (archive, image, oldimage, and revision) each declare a (user, timestamp) index.
- Problem
For the archive database table, there is a (user, timestamp) index that is:
o named one way in maintenance/table.sql, and
o named another way in the update patch maintenance/archives/patch-archive-user-index.sql.
Table name | Index name - table.sql | Index name - update patch | Match |
archive | ar_usertext_timestamp | usertext_timestamp | NO |
image | img_usertext_timestamp | img_usertext_timestamp | yes |
oldimage | oi_usertext_timestamp | oi_usertext_timestamp | yes |
revision | usertext_timestamp | usertext_timestamp | yes |
- Contents of maintenance/tables.sql
CREATE TABLE /*_*/archive (
ar_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
...
ar_content_format varbinary(64) DEFAULT NULL
) /*$wgDBTableOptions*/;
CREATE INDEX /*i*/name_title_timestamp ON /*_*/archive (ar_namespace,ar_title,ar_timestamp);
CREATE INDEX /*i*/ar_usertext_timestamp ON /*_*/archive (ar_user_text,ar_timestamp);
CREATE INDEX /*i*/ar_revid ON /*_*/archive (ar_rev_id);
- Contents of maintenance/archives/patch-archive-user-index.sql
ALTER TABLE /*$wgDBprefix*/archive
ADD INDEX usertext_timestamp ( ar_user_text , ar_timestamp );
- Consequence
When the patch is applied using maintenance/update.php, the database schema becomes:
PRIMARY KEY (ar_id),
KEY name_title_timestamp (ar_namespace,ar_title,ar_timestamp),
KEY ar_usertext_timestamp (ar_user_text,ar_timestamp),
KEY ar_revid (ar_rev_id),
KEY usertext_timestamp (ar_user_text,ar_timestamp)
) ENGINE=InnoDB DEFAULT CHARSET=binary;
which looks dubious.
- Technical details
GIT branch: master