Должно быть потому, что как только он находит первые результаты, он начинает их выдавать, и идти дальше, а в случае, когда ничего подходящего не находится, ему приходится перелопатить всё соединение, и только в конце наконец сообщить "Empty Set".
Проверьте скорость работы SELECT COUNT(1) FROM Proto_KBK as A, Proto_KBK as B WHERE A.KBK = B.KBK AND A.name != B.name, т.е. время ответа после полного выполнения запроса, а не время до начала возврата первых результатов.
я бы переписал запрос через distinct и having, что-то вроде: select count(kbk, name) from proto_kbk group by (kbk, name) having count(kbk,name) > 1; А для того, чтобы ответить на ваш вопрос нужно видить explain - без table definition и индексов неясно что происходит.
Comments 5
(The comment has been removed)
экспериментировать лениво, операция сделана и больше не потребуется
Reply
Reply
читать: http://dev.mysql.com/doc/refman/5.0/en/left-join-optimization.html
Reply
Проверьте скорость работы
SELECT COUNT(1)
FROM Proto_KBK as A,
Proto_KBK as B
WHERE A.KBK = B.KBK
AND A.name != B.name, т.е. время ответа после полного выполнения запроса, а не время до начала возврата первых результатов.
Reply
select count(kbk, name) from proto_kbk group by (kbk, name) having count(kbk,name) > 1;
А для того, чтобы ответить на ваш вопрос нужно видить explain - без table definition и индексов неясно что происходит.
Reply
Leave a comment