【发布时间】:2011-11-18 23:36:44
【问题描述】:
我最近读到,对于 innodb 表,在 (something,primary_key) 上放置索引是多余的,因为主键会自动与所有二级索引聚集在一起。 因此,为了减小索引大小,我复制了我的表,删除了冗余主键,并进行了一些测试查询,我发现它的行为与使用“冗余”主键的原始表不同。
解释告诉我它正在做一个相交:
Using intersect(idx_faver_idx_id,PRIMARY);
下面是查询。如果我删除 "AND Favorite.id 那么它会按预期工作并使用正确的索引 (idx_faver_idx_id)。
SELECT `Item`.`id`, `Item`.`cached_image`, `Item`.`submitter_id`, `Item`.`source_title`, `Item`.`source_url`, `Item`.`source_image`, `Item`.`nudity`, `Item`.`tags`, `Item`.`width`, `Item`.`height`, `Item`.`tumblr_id`, `Item`.`tumblr_reblog_key`, `Item`.`fave_count`, `Favorite`.`id`, `Favorite`.`created`
FROM `favorites2` AS `Favorite`
LEFT JOIN `items` AS `Item`
ON (`Favorite`.`notice_id` = `Item`.`id`)
WHERE `faver_profile_id` = 1
AND `Favorite`.`removed` = 0
AND `Item`.`removed` = '0'
AND `Favorite`.`id` < 25103182
ORDER BY `Favorite`.`id` desc
LIMIT 26
【问题讨论】: