Определите, есть ли в объединенной таблице 1 или более 1 совпадающих строк.Есть ли лучший способ, чем GROUP BY и COUNT? - PullRequest
0 голосов
/ 21 декабря 2011

Я присоединяю таблицу A к таблице B и мне нужно знать, есть ли в таблице B 1 подходящая строка или более одной.

Конечно, я могу сделать это с GROUP BY и COUNT, но это перебор, потому что он должен считать все совпадения и мне эта информация не нужна.

Существует ли простой способ получения необходимой мне информации (только одна совпадающая строка или более), которая закорачивает оценку и останавливается, когда она знает ответ без сканирования и подсчета всех оставшихся совпадений?

Или я не должен заботиться об этом, потому что это не большой удар по производительности, и я должен просто пойти с COUNT?

Ответы [ 2 ]

0 голосов
/ 21 декабря 2011

Если вам просто нужно знать, есть ли одна или несколько строк для определенного соединения sql, что означает совпадение строки:

-- Without any sample SQL code, here's a return sample
SELECT B.SOMEJOINAPPLICABLECOLUMN
FROM A 
LEFT OUTER JOIN B
    ON A.SOMEJOINAPPLICABLECOLUMN = B.SOMEJOINAPPLICABLECOLUMN
WHERE 
    B.SOMEJOINAPPLICABLECOLUMN IS NOT NULL 
LIMIT 2;

Естественно:

2 returned rows = more than one match
1 returned row  = one match
0 returned rows = no matches
0 голосов
/ 21 декабря 2011

Это действительно зависит от размера БД и ваших точных требований. Обычно комбинация count () / Group By / Имеет довольно эффективный запрос с правильными индексами. Вы можете сделать это более сложным способом, например, включив триггер после обновления, который обновит таблицу счетчиков.

Видите ли вы, что комбинация (*) / группа / наличие дает вам проблемы с производительностью?

...