У меня есть уникальный составной ключ, такой как fr (fromid, toid) в таблице, когда я запускаю запрос с объяснением, я получаю следующий результат:
Impossible WHERE noticed after reading const tables`
Запрос, который я выполнил:
explain SELECT rid FROM relationship WHERE fromid=78 AND toid=60
Любая помощь?
EDIT1:
когда я использую запрос ниже:
explain SELECT rid FROM relationship WHERE fromid=60 and toid=78 AND is_approved='s' OR is_approved='f' OR is_approved='t'
Я вижу USING WHERE
вместо предыдущего сообщения, но когда я использую запрос ниже:
explain SELECT rid FROM relationship WHERE fromid=60 and toid=78 AND (is_approved='s' OR is_approved='f' OR is_approved='t')
Я снова получаю первое impossible ...
сообщение! Что эти круглые скобки делают здесь?
EDIT2:
CREATE TABLE `relationship` (
`rid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`fromid` mediumint(8) unsigned NOT NULL,
`toid` mediumint(8) unsigned NOT NULL,
`type` tinyint(3) unsigned NOT NULL,
`is_approved` char(1) NOT NULL,
PRIMARY KEY (`rid`),
UNIQUE KEY `fromid` (`fromid`,`toid`),
KEY `toid` (`toid`),
CONSTRAINT `relationship_ibfk_1` FOREIGN KEY (`fromid`) REFERENCES `user` (`uid`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `relationship_ibfk_2` FOREIGN KEY (`toid`) REFERENCES `user` (`uid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB
EDIT3:
Как MySQL сайт говорит:
Невозможно ГДЕ заметил после прочтения const таблиц
MySQL прочитал все const (и системные) таблицы и заметил, что предложение WHERE всегда ложно.
Но в запросе я получаю желаемый результат, а WHERE
часть - нет false
. Есть ли кто-то, кто мог бы объяснить это и пролить свет на эту тему?
using index
вместоimpossible...
SELECT COUNT(1) FROM relationship WHERE fromid=78 AND toid=60;
возвращает ???