Tôi có một khóa ghép duy nhất như fr (fromid, toid) trong bảng, khi tôi chạy truy vấn với giải thích tôi nhận được kết quả sau:
Impossible WHERE noticed after reading const tables`
Truy vấn tôi đã chạy:
explain SELECT rid FROM relationship WHERE fromid=78 AND toid=60
Có ai giúp đỡ không?
EDIT1:
Khi tôi sử dụng truy vấn dưới đây:
explain SELECT rid FROM relationship WHERE fromid=60 and toid=78 AND is_approved='s' OR is_approved='f' OR is_approved='t'
Tôi thấy USING WHERE
thay vì tin nhắn trước đó, nhưng khi tôi sử dụng truy vấn bên dưới:
explain SELECT rid FROM relationship WHERE fromid=60 and toid=78 AND (is_approved='s' OR is_approved='f' OR is_approved='t')
Tôi lại nhận được impossible ...
tin nhắn đầu tiên ! Những dấu ngoặc đơn này làm gì ở đây?
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
Không thể nhận thấy WHERE sau khi đọc bảng const
MySQL đã đọc tất cả các bảng const (và hệ thống) và lưu ý rằng mệnh đề WHERE luôn luôn sai.
Nhưng trong truy vấn tôi nhận được kết quả tôi muốn, WHERE
phần thì không false
. Có ai đó có thể giải thích điều này và làm sáng tỏ chủ đề này?
using index
thêm thay vìimpossible...
SELECT COUNT(1) FROM relationship WHERE fromid=78 AND toid=60;
???