странное поведение Mysql

dfilatov

Новичок
странное поведение Mysql

есть безобидный запрос
SELECT
id
FROM
articles
WHERE
published = 1
AND
publish_date <= '2008-04-28'
AND
type = 4
ORDER BY
dt DESC

В таком виде выполняется моментально, составной ключ есть по этим полям есть.

Как только добавляю еще одно поле в SELECT, то запрос выполняется 12 секунд и explain показывает, что индекс больше не используется :-( Как это связано? Как побороть?

SELECT
id,
summary
FROM
articles
WHERE
published = 1
AND
publish_date <= '2008-04-28'
AND
type = 4
ORDER BY
dt DESC
 

dfilatov

Новичок
CREATE TABLE `articles` (
`id` int(11) unsigned NOT NULL default '0',
`title` text,
`summary` text,
`dt` datetime default NULL,
`body` mediumtext,
`publish_date` date default NULL,
`published` tinyint(1) unsigned default '0',
`photo` varchar(48) default NULL,
`region_type` tinyint(1) unsigned NOT NULL default '0',
`type` tinyint(4) unsigned NOT NULL default '1',
`story_id` int(11) unsigned default NULL,
`picture_main` varchar(64) default NULL,
`picture_important` varchar(64) default NULL,
`picture` varchar(64) default NULL,
`background` varchar(64) default NULL,
`gallery_id` int(11) unsigned default NULL,
`video` varchar(48) default NULL,
`picture_content` varchar(48) default NULL,
`outer_video_href` varchar(64) default NULL,
PRIMARY KEY (`id`),
KEY `dt` (`dt`),
KEY `dt_region_type` (`dt`,`region_type`),
KEY `story_id` (`story_id`),
KEY `published_publish_date_dt` (`published`,`publish_date`,`dt`),
KEY `published_publish_date_story_id_dt` (`published`,`publish_date`,`story_id`,`dt`),
KEY `published_publish_date_type_dt` (`published`,`publish_date`,`type`,`dt`),
KEY `published_publish_date_type` (`published`,`publish_date`,`type`),
CONSTRAINT `articles_ibfk_1` FOREIGN KEY (`story_id`) REFERENCES `articles` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED


Если выбирается только поле id:
"id";"select_type";"table";"type";"possible_keys";"key";"key_len";"ref";"rows";"Extra"
1;"SIMPLE";"articles";"range";"published_publish_date_dt,published_publish_date_story_id_dt,published_publish_date_type_dt,published_publish_date_type";"published_publish_date_type_dt";7;NULL;14604;"Using where; Using index; Using filesort"

Если выбирается только несколько полей:
"id";"select_type";"table";"type";"possible_keys";"key";"key_len";"ref";"rows";"Extra"
1;"SIMPLE";"articles";"ref";"published_publish_date_dt,published_publish_date_story_id_dt,published_publish_date_type_dt,published_publish_date_type";"published_publish_date_type";2;"const";7302;"Using where; Using filesort"
 

svetasmirnova

маленький монстрик
а какая версия MySQL

Tip: EXPLAIN ... \G выводит всё в читаемом виде

-~{}~ 28.04.08 21:07:

Ну вобщем короче похоже на http://bugs.mysql.com/bug.php?id=26003 Но у меня с тестовыми данными на девелоперской 5.0 не воспроизводится. Так что worth trying to upgrade.
 
Сверху