我有一個簡單的邀請表:MySQL的 - 或者運營商不使用索引
CREATE TABLE `invitation` (
`invitation_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`inviter_id` int(10) unsigned NOT NULL,
`invitee_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`invitation_id`),
UNIQUE KEY `invitee_inviter_idx` (`invitee_id`,`inviter_id`)
)
我想選擇由邀請方70的邀請,被邀請者62,反之亦然:
EXPLAIN SELECT * FROM `invitation` WHERE
(invitee_id = 70 AND inviter_id = 62) OR (invitee_id = 62 AND inviter_id = 70)
但此查詢是ALL類型,不使用invitee_inviter_idx。 請告訴我這裏有什麼問題?
謝謝!
==編輯== 對不起,我錯了模式,它有一個字段:request_ts。這次查詢計劃是ALL。
CREATE TABLE `invitation` (
`invitation_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`inviter_id` int(10) unsigned NOT NULL,
`invitee_id` int(10) unsigned NOT NULL,
`request_ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`invitation_id`),
UNIQUE KEY `invitee_inviter_idx` (`invitee_id`,`inviter_id`)
)
這裏是我的應歸結爲結果:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE invitation ALL invitee_inviter_idx \N \N \N 1 Using where
表中有多少條記錄?如果表格非常小,那麼查詢優化器可能會決定進行全面掃描,因爲這樣做非常便宜。 – Hammerite
我想你只是在某些情況下才能得到它的MyISAM表;即當您在「額外」列中看到「不可能在讀取常量表後注意到的地方」時,發現 – a1ex07
@Salman A,對不起,我錯了,我更新了模式。 – robinmag