[Toolserver-l] I have difficulties with USE INDEX(...) in mysql on the toolserver.

philipp.zedler at tu-berlin.de philipp.zedler at tu-berlin.de
Sun Oct 30 14:36:05 UTC 2011


Hallo,

I'm working with the very huge mysql table 'revision' in the database  
e.g. enwiki_p and would like to choose keys by hand using 'USE  
INDEX(...)', because I think, mysql's choices are sometimes not ideal.

My difficulty is that if I try to do so, mysql claims that the key  
__doesn't exist__ although it is displayed when I use 'EXPLAIN' and it  
exists according to the database scheme.

Is there something special about the mysql implementation on the toolserver?

Thanks for any hints.
Philipp


NOW THE DETAILS:

To display that 'rev_timestamp' is in fact a key in the table  
'revision', we can do this:
mysql> EXPLAIN SELECT rev_timestamp FROM revision LIMIT 10;
+----+-------------+----------+-------+---------------+---------------+---------+------+-----------+-------------+
| id | select_type | table    | type  | possible_keys | key            
| key_len | ref  | rows      | Extra       |
+----+-------------+----------+-------+---------------+---------------+---------+------+-----------+-------------+
|  1 | SIMPLE      | revision | index | NULL          | rev_timestamp  
| 16      | NULL | 438608433 | Using index |
+----+-------------+----------+-------+---------------+---------------+---------+------+-----------+-------------+
1 row in set (0.00 sec)

Also from this website
http://svn.wikimedia.org/svnroot/mediawiki/trunk/phase3/maintenance/tables.sql
one can conclude that the index 'rev_timestamp' is there.

However:
If I try to set the key by hand, mysql claims the key would not exist  
(also if I omit the quote signs):
mysql> SELECT rev_timestamp FROM revision USE INDEX(`rev_timestamp`) LIMIT 10;
ERROR 1176 (42000): Key 'rev_timestamp' doesn't exist in table 'revision'

Also in the description of the table there appear no keys:
mysql> DESCRIBE revision;
+----------------+---------------------+------+-----+---------+-------+
| Field          | Type                | Null | Key | Default | Extra |
+----------------+---------------------+------+-----+---------+-------+
| rev_id         | int(8) unsigned     | NO   |     | 0       |       |
| rev_page       | int(8) unsigned     | NO   |     | 0       |       |
| rev_text_id    | int(8) unsigned     | NO   |     | 0       |       |
| rev_comment    | varbinary(255)      | YES  |     | NULL    |       |
| rev_user       | int(5) unsigned     | NO   |     | 0       |       |
| rev_user_text  | varbinary(255)      | NO   |     |         |       |
| rev_timestamp  | varbinary(14)       | NO   |     |         |       |
| rev_minor_edit | tinyint(1) unsigned | NO   |     | 0       |       |
| rev_deleted    | tinyint(1) unsigned | NO   |     | 0       |       |
| rev_len        | int(8) unsigned     | YES  |     | NULL    |       |
| rev_parent_id  | int(8) unsigned     | YES  |     | NULL    |       |
+----------------+---------------------+------+-----+---------+-------+
11 rows in set (0.00 sec)





More information about the Toolserver-l mailing list