Manual:categorylinks table

From Linux Web Expert

The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.


Manual:Contents <translate> MediaWiki database layout</translate> <translate> <tvar name=1>categorylinks</tvar> table</translate>
MediaWiki version:
<translate> ≥</translate> 1.3

The categorylinks table stores entries corresponding to links of the form [[Category:Title]] or [[Category:Title|sortkey]], which when placed anywhere on a page places that page into the category named Title (for which an associated page may or may not exist). Links beginning with a colon, like [[:Category:Title]], are not stored in the categorylinks table, but are handled as normal internal links (in this case leading to the page Category:Title). The editable parts of category pages are stored like other pages.

There are four indexes which help improve performance:

  • The concatenation of cl_from and cl_to (for when an article is edited)
  • The concatenation of cl_to, cl_type, cl_sortkey, and cl_from (for showing articles in order)
  • The concatenation of cl_to and cl_timestamp
  • cl_collation

Fields

cl_from

Stores the page.page_id of the article where the link was placed.

cl_to

Stores the name of the desired category in the page_title format (that is, with _ and excluding namespace prefix).

cl_sortkey

Stores the title by which the page should be sorted in a category list. This is the binary sortkey, that depending on $wgCategoryCollation may or may not be readable by a human (but should sort in correct order when comparing as a byte string), and is not valid UTF-8 whenever the database truncates the sortkey in the middle of a multi-byte sequence.

cl_timestamp

Stores the time at which that link was last updated in the table.

cl_sortkey_prefix

This is either the empty string if a page is using the default sortkey (aka the sortkey is unspecified). Otherwise it is the human readable version of cl_sortkey. Needed mostly so that cl_sortkey can be easily updated in certain situations without re-parsing the entire page. More recently added values are valid UTF-8 (see change 449280 on Gerrit).

cl_collation

MediaWiki version:
<translate> ≥</translate> 1.17

What collation is in use. Used so that if the collation changes, the updateCollation.php script knows what rows need to be fixed in db.

cl_type

What type of page is this (file, subcat (subcategory) or page (normal page)). Used so that the different sections on a category page can be paged independently in an efficient manner.

Schema summary

MediaWiki version:
<translate> ≥</translate> 1.17

DESCRIBE categorylinks;

+-------------------+------------------------------+------+-----+-------------------+-----------------------------+
| Field             | Type                         | Null | Key | Default           | Extra                       |
+-------------------+------------------------------+------+-----+-------------------+-----------------------------+
| cl_from           | int(10) unsigned             | NO   | PRI | 0                 |                             |
| cl_to             | varbinary(255)               | NO   | PRI |                   |                             |
| cl_sortkey        | varbinary(230)               | NO   |     |                   |                             |
| cl_sortkey_prefix | varbinary(255)               | NO   |     |                   |                             |
| cl_timestamp      | timestamp                    | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| cl_collation      | varbinary(32)                | NO   | MUL |                   |                             |
| cl_type           | enum('page','subcat','file') | NO   |     | page              |                             |
+-------------------+------------------------------+------+-----+-------------------+-----------------------------+
File:OOjs UI icon notice-destructive.svg <translate> Warning:</translate> Starting with version 1.17, the index on (cl_to, cl_sortkey) is no more, and replaced with one on (cl_to, cl_type, cl_sortkey, cl_from). Extensions that directly query the categorylinks table to get a list of pages in sorted order need to make sure they are using the new index, or the query may become very inefficient
<td class="mw-version-versionbox" title="<translate nowrap> MediaWiki <tvar name=1>1.16</tvar> is unsupported version</translate>">
1.10 – 1.16
<translate> MediaWiki versions:</translate>

DESCRIBE categorylinks;

+--------------+------------------+------+-----+-------------------+-----------------------------+
| Field        | Type             | Null | Key | Default           | Extra                       |
+--------------+------------------+------+-----+-------------------+-----------------------------+
| cl_from      | int(10) unsigned | NO   | PRI | 0                 |                             |
| cl_to        | varbinary(255)   | NO   | PRI |                   |                             |
| cl_sortkey   | varbinary(70)    | NO   |     |                   |                             |
| cl_timestamp | timestamp        | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+--------------+------------------+------+-----+-------------------+-----------------------------+
<td class="mw-version-versionbox" title="<translate nowrap> MediaWiki <tvar name=1>1.9</tvar> is unsupported version</translate>">
1.5 – 1.9
<translate> MediaWiki versions:</translate>

DESCRIBE categorylinks;

+--------------+-----------------+------+-----+-------------------+-----------------------------+
| Field        | Type            | Null | Key | Default           | Extra                       |
+--------------+-----------------+------+-----+-------------------+-----------------------------+
| cl_from      | int(8) unsigned | NO   | PRI | 0                 |                             |
| cl_to        | varchar(255)    | NO   | PRI |                   |                             |
| cl_sortkey   | varchar(86)     | NO   |     |                   |                             |
| cl_timestamp | timestamp       | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+--------------+-----------------+------+-----+-------------------+-----------------------------+
<td class="mw-version-versionbox" title="<translate nowrap> MediaWiki <tvar name=1>1.4</tvar> is unsupported version</translate>">
1.3 – 1.4
<translate> MediaWiki versions:</translate>

DESCRIBE categorylinks;

+--------------+-----------------+------+-----+-------------------+-----------------------------+
| Field        | Type            | Null | Key | Default           | Extra                       |
+--------------+-----------------+------+-----+-------------------+-----------------------------+
| cl_from      | int(8) unsigned | NO   | PRI | 0                 |                             |
| cl_to        | varchar(255)    | NO   | PRI |                   |                             |
| cl_sortkey   | varchar(255)    | NO   |     |                   |                             |
| cl_timestamp | timestamp       | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+--------------+-----------------+------+-----+-------------------+-----------------------------+

Indexes

<td class="mw-version-versionbox" title="<translate nowrap> The latest stable version is <tvar name=1>1.41</tvar></translate>">
<translate> ≥</translate> 1.42
<translate> MediaWiki version:</translate>

SHOW INDEX IN categorylinks;

+---------------+------------+--------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table         | Non_unique | Key_name     | Seq_in_index | Column_name  | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+---------------+------------+--------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| categorylinks |          0 | PRIMARY      |            1 | cl_from      | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| categorylinks |          0 | PRIMARY      |            2 | cl_to        | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| categorylinks |          1 | cl_sortkey   |            1 | cl_to        | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| categorylinks |          1 | cl_sortkey   |            2 | cl_type      | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| categorylinks |          1 | cl_sortkey   |            3 | cl_sortkey   | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| categorylinks |          1 | cl_sortkey   |            4 | cl_from      | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| categorylinks |          1 | cl_timestamp |            1 | cl_to        | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| categorylinks |          1 | cl_timestamp |            2 | cl_timestamp | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
+---------------+------------+--------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

See also

External links