Eu tenho uma chave composta exclusiva como fr (fromid, toid) na tabela. Quando executo a consulta com o explicador, obtenho o seguinte resultado:
Impossible WHERE noticed after reading const tables`
A consulta que eu executei:
explain SELECT rid FROM relationship WHERE fromid=78 AND toid=60
Qualquer ajuda?
EDIT1:
Quando eu uso a consulta abaixo:
explain SELECT rid FROM relationship WHERE fromid=60 and toid=78 AND is_approved='s' OR is_approved='f' OR is_approved='t'
Eu vejo em USING WHERE
vez da mensagem anterior, mas quando uso a consulta abaixo:
explain SELECT rid FROM relationship WHERE fromid=60 and toid=78 AND (is_approved='s' OR is_approved='f' OR is_approved='t')
Recebo novamente a primeira impossible ...
mensagem! O que esses parênteses fazem aqui?
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:
Como o site mysql diz:
Impossível ONDE notado após a leitura de tabelas const
O MySQL leu todas as tabelas const (e system) e percebe que a cláusula WHERE é sempre falsa.
Mas, na consulta, obtenho o resultado desejado, a WHERE
parte não é false
. Existe alguém que possa explicar isso e lançar alguma luz sobre o assunto?
using index
extra em vez deimpossible...
SELECT COUNT(1) FROM relationship WHERE fromid=78 AND toid=60;
retorna ???