テーブルにfr(fromid、toid)のような一意の複合キーがあり、explainを使用してクエリを実行すると、次の結果が得られます。
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テーブルの読み取り後に気付かない可能性のあるWHERE
MySQLはすべてのconst(およびシステム)テーブルを読み取り、WHERE句が常にfalseであることを確認しました。
しかし、私が望む結果を得るクエリでは、WHERE
部分はそうではありませんfalse
。これを説明し、主題に光を当てることができる人はいますか?
using index
余分の代わりにimpossible...
SELECT COUNT(1) FROM relationship WHERE fromid=78 AND toid=60;
返されますか?