2010/11/4 Changying Li <lchangy...@gmail.com>:
>  PRIMARY KEY (`threadid`),
>  KEY `dateline` (`dateline`),
>  KEY `forumid_2` (`forumid`,`thread_type_id`,`visible`,`sticky`,`dateline`),
>  KEY `forumid` (`forumid`,`visible`,`sticky`,`dateline`)
> ) ENGINE=InnoDB AUTO_INCREMENT=660 DEFAULT CHARSET=utf8;
>
> mysql> explain  SELECT *  FROM `abc` WHERE `forumid` = 25 AND `visible` = 1 
> AND `sticky` = 0 order by dateline \G
> possible_keys: forumid_2,forumid
>          key: forumid_2
>        Extra: Using where; Using filesort
>
> why it choose forumid_2, not forumid ?

5.0 docs online say:

With EXPLAIN SELECT ... ORDER BY, you can check whether MySQL can use
indexes to resolve the query. It cannot if you see Using filesort in
the Extra column. See Section 7.2.1, “Optimizing Queries with
EXPLAIN”.

Your query is using filesort, so it cannot according to the above statement.

The docs also say in section 7.3.1.11 that it might not use an index if:

The key used to fetch the rows is not the same as the one used in the
ORDER BY...

I'm curious, if you change the SELECT to a few named fields instead of
*, does it affect the key choice?  If you only select on fields in the
key (i.e. a covering index) does it still choose what you consider to
be the wrong key?
-- 
Regards...      Todd
I seek the truth...it is only persistence in self-delusion and
ignorance that does harm.  -- Marcus Aurealius

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql?unsub=arch...@jab.org

Reply via email to