Ho una chiave composta unica come fr (fromid, toid) nella tabella, quando eseguo la query con spiegato ottengo il seguente risultato:
Impossible WHERE noticed after reading const tables`
La query che ho eseguito:
explain SELECT rid FROM relationship WHERE fromid=78 AND toid=60
Qualsiasi aiuto?
EDIT1:
quando utilizzo la query seguente:
explain SELECT rid FROM relationship WHERE fromid=60 and toid=78 AND is_approved='s' OR is_approved='f' OR is_approved='t'
Vedo USING WHERE
invece del messaggio precedente, ma quando utilizzo la query seguente:
explain SELECT rid FROM relationship WHERE fromid=60 and toid=78 AND (is_approved='s' OR is_approved='f' OR is_approved='t')
Ricevo di nuovo il primo impossible ...
messaggio! Cosa fanno queste parentesi qui?
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:
Come dice il sito mysql:
Impossibile DOVE notato dopo aver letto le tabelle const
MySQL ha letto tutte le tabelle const (e di sistema) e nota che la clausola WHERE è sempre falsa.
Ma nella query ottengo il risultato desiderato, la WHERE
parte no false
. C'è qualcuno che potrebbe spiegarlo e fare luce sull'argomento?
using index
in più invece diimpossible...
SELECT COUNT(1) FROM relationship WHERE fromid=78 AND toid=60;
restituisce ???