SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 26.01.2009 01:42:54

Belkin
Участник
Зарегистрирован: 26.01.2009
Сообщений: 1

Как верно?

у меня есть запрос

select fcmbid, fwait from tcombatini main where 0 = (select count(fgrp) from tcombat where fcmbid=main.fcmbid and fgrp=2)

но как я заметил он нагружает мускул

и переписал на

select main.fcmbid, main.fwait from tcombatini main
left join tcombat tc on  tc.fcmbid=main.fcmbid and tc.fgrp=2
where tc.fcmbid is null

вопрос как вернее и как меньше нагружает мускул?

Неактивен

 

#2 26.01.2009 16:13:25

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Как верно?

Первый запрос плох тем, что использует COUNT() = 0. NOT EXISTS  работает быстрее для случаев,
когда есть хотя бы одна строка.

Как вариант могу еще предложить третий вариант

SELECT ...
FROM tcombatini main
WHERE fcmbid NOT IN (SELECT DISTINCT fcmbid FROM tcombat WHERE fgrp=2)

Он тоже будет тормозить. Даже с ключиком на (fgrp, fcmbid).

Доставать все данные из одной табличке, для которых нет строк в другой табличке
в случае с большими таблицами - дело очень неблагодарное. Вас должна спасти денормализация.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson