Tengo una clave compuesta única como fr (fromid, toid) en la tabla, cuando ejecuto la consulta con explicar obtengo el siguiente resultado:
Impossible WHERE noticed after reading const tables`
La consulta que ejecuté:
explain SELECT rid FROM relationship WHERE fromid=78 AND toid=60
¿Alguna ayuda?
EDITAR1:
cuando uso la siguiente consulta:
explain SELECT rid FROM relationship WHERE fromid=60 and toid=78 AND is_approved='s' OR is_approved='f' OR is_approved='t'
Veo en USING WHERE
lugar del mensaje anterior, pero cuando uso la siguiente consulta:
explain SELECT rid FROM relationship WHERE fromid=60 and toid=78 AND (is_approved='s' OR is_approved='f' OR is_approved='t')
De nuevo recibo el primer impossible ...
mensaje! ¿Qué hacen estos paréntesis aquí?
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
EDITAR3:
Como dice el sitio mysql:
Imposible DONDE se notó después de leer tablas const
MySQL ha leído todas las tablas const (y del sistema) y ha notado que la cláusula WHERE siempre es falsa.
Pero en la consulta obtengo el resultado que quiero, la WHERE
parte no lo es false
. ¿Hay alguien que pueda explicar esto y arrojar algo de luz sobre el tema?
using index
en lugar deimpossible...
SELECT COUNT(1) FROM relationship WHERE fromid=78 AND toid=60;
devuelve?