因为我需要永久地在我的4000万行表上进行索引更改,所以我希望得到一些反馈,以确保我第一次就做好。
现在我的“收藏夹”表有3个索引:
要检查用户是否已“删除”特定项目,请使用此查询:
SELECT id FROM favorites
WHERE item_id = '.mysql_real_escape_string($item_id).'
AND faver_profile_id = '.mysql_real_escape_string($user['id']).'
AND removed = 0
哪个正在进行互动:
Using intersect(item_idx,faver_id_idx)
这对我来说似乎效率很低,所以我正在考虑以下索引设置:
我看到的好处是:
我的问题:
在(item_id,removed,faver_profile_id)索引中,是否有任何理由让faver_profile_id首先出现?例如,如果我正在进行以下查询..
SELECT items.*, users.*, favorites.item_id
FROM items
LEFT JOIN users ON (items.submitter_id = users.id)
LEFT JOIN favorites ON (items.id = favorites.item_id AND favorites.faver_profile_id = 56 AND favorites.removed = 0)
ORDER BY items.id desc LIMIT 26
将faver_profile_id放在索引的第一位是否更好,以便它只能跳转到索引的右侧faver_profile_id部分,而不必检查多个item_id部分,然后在每个部分中扫描faver_profile_id?
我忽略了什么?