(Untitled)

Jun 05, 2006 17:11

Привет ( Read more... )

оптимизация

Leave a comment

Comments 5

(The comment has been removed)

ex_shkoorah870 June 5 2006, 13:33:02 UTC
да ну на фиг :)
экспериментировать лениво, операция сделана и больше не потребуется

Reply


sanmai June 5 2006, 13:59:43 UTC
EXPLAIN SELECT...

Reply


necromant_2005 June 5 2006, 14:02:04 UTC
Потому, что внутрений оптимизатор так обрабатывает, пытаясь сначала исключить наибольшее подмножество резльтатов не удовлетворяющих условию.
читать: http://dev.mysql.com/doc/refman/5.0/en/left-join-optimization.html

Reply


cybrarian June 5 2006, 18:28:27 UTC
Должно быть потому, что как только он находит первые результаты, он начинает их выдавать, и идти дальше, а в случае, когда ничего подходящего не находится, ему приходится перелопатить всё соединение, и только в конце наконец сообщить "Empty Set".

Проверьте скорость работы
SELECT COUNT(1)
FROM Proto_KBK as A,
Proto_KBK as B
WHERE A.KBK = B.KBK
AND A.name != B.name, т.е. время ответа после полного выполнения запроса, а не время до начала возврата первых результатов.

Reply


kostja_osipov June 12 2006, 17:09:22 UTC
я бы переписал запрос через distinct и having, что-то вроде:
select count(kbk, name) from proto_kbk group by (kbk, name) having count(kbk,name) > 1;
А для того, чтобы ответить на ваш вопрос нужно видить explain - без table definition и индексов неясно что происходит.

Reply


Leave a comment

Up