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_actor_timestamp ON /*_*/archive (ar_actor,ar_timestamp);
-CREATE INDEX /*i*/ar_revid ON /*_*/archive (ar_rev_id);
+CREATE UNIQUE INDEX /*i*/ar_revid_uniq ON /*_*/archive (ar_rev_id);
--
CREATE INDEX /*i*/cat_pages ON /*_*/category (cat_pages);
+--
+-- Table defining tag names for IDs. Also stores hit counts to avoid expensive queries on change_tag
+--
+CREATE TABLE /*_*/change_tag_def (
+ -- Numerical ID of the tag (ct_tag_id refers to this)
+ ctd_id int NOT NULL CONSTRAINT PK_change_tag_def PRIMARY KEY IDENTITY,
+ -- Symbolic name of the tag (what would previously be put in ct_tag)
+ ctd_name nvarchar(255) NOT NULL,
+ -- Whether this tag was defined manually by a privileged user using Special:Tags
+ ctd_user_defined tinyint NOT NULL CONSTRAINT DF_ctd_user_defined DEFAULT 0,
+ -- Number of times this tag was used
+ ctd_count int NOT NULL CONSTRAINT DF_ctd_count DEFAULT 0
+) /*$wgDBTableOptions*/;
+
+CREATE UNIQUE INDEX /*i*/ctd_name ON /*_*/change_tag_def (ctd_name);
+CREATE INDEX /*i*/ctd_count ON /*_*/change_tag_def (ctd_count);
+CREATE INDEX /*i*/ctd_user_defined ON /*_*/change_tag_def (ctd_user_defined);
+
--
-- Track links to external URLs
--
-- This is el_index truncated to 60 bytes to allow for sortable queries that
-- aren't supported by a partial index.
- -- @todo Drop the default once this is deployed everywhere and code is populating it.
- el_index_60 varbinary(60) NOT NULL default ''
+ el_index_60 varbinary(60) NOT NULL
);
CREATE INDEX /*i*/el_from ON /*_*/externallinks (el_from);
-- Tag applied
ct_tag nvarchar(255) NOT NULL,
-- Parameters for the tag, presently unused
- ct_params nvarchar(max) NULL
+ ct_params nvarchar(max) NULL,
+ -- Foreign key to change_tag_def row
+ ct_tag_id int NULL CONSTRAINT ctd_tag_id__fk FOREIGN KEY REFERENCES /*_*/change_tag_def(ctd_id)
);
CREATE UNIQUE INDEX /*i*/change_tag_rc_tag ON /*_*/change_tag (ct_rc_id,ct_tag);
CREATE UNIQUE INDEX /*i*/change_tag_rev_tag ON /*_*/change_tag (ct_rev_id,ct_tag);
-- Covering index, so we can pull all the info only out of the index.
CREATE INDEX /*i*/change_tag_tag_id ON /*_*/change_tag (ct_tag,ct_rc_id,ct_rev_id,ct_log_id);
-
+CREATE INDEX /*i*/change_tag_tag_id_id ON /*_*/change_tag (ct_tag_id,ct_rc_id,ct_rev_id,ct_log_id);
-- Rollup table to pull a LIST of tags simply without ugly GROUP_CONCAT
-- that only works on MySQL 4.1+