У мене в таблиці є унікальний складний ключ на зразок 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;
повертає ???