Что является наименее дорогостоящей агрегатной функцией при отсутствии ЛЮБОГО()
Я обычно использую MAX() или MIN(), если СУБД не имеет функции ANY().
Есть ли что-то менее дорогое в mySQL и MS-SQL?
Ответы
Ответ 1
MySQL делает не нужен агрегат ANY().
если я делаю
SELECT field1, field2, SUM(field3) FROM table1
GROUP BY field2
Microsoft T-SQL будет жаловаться, но
MySQL будет просто выполнять
SELECT whatever(field1), field2, SUM(....
Это, конечно, намного быстрее, чем SELECT max(field1), field2, SUM(.... GROUP BY field2
MySQL поддерживает ANY
, но SELECT ANY(field1) ...
не работает, потому что ANY
- это оператор, похожий на IN
и ALL
.
см. http://dev.mysql.com/doc/refman/5.0/en/any-in-some-subqueries.html
Мне нравится MySQL
Ответ 2
Нет никакой ЛЮБОЙ совокупности в ANSI SQL-92
Существует ЛЮБОЙ определитель, который соответствует SOME и ALL
MIN и MAX являются правильными агрегатами... полностью не связаны и не должны сравниваться
Edit:
Только у MySQL есть эта двусмысленность "ANY" aggregate: SQL Server, Sybase, Oracle, PostGres нет. См. Все столбцы в списке SELECT должны появиться в предложении GROUP BY
Ответ 3
MIN и MAX одинаково дорогие.
Ответ 4
Хорошо, позвольте перефразировать исходный вопрос. Вместо ЛЮБОГО, что является неоднозначным, а не стандартом SQL, было бы здорово, если бы была предоставлена вспомогательная функция EXISTS.
В нескольких случаях я использовал "count (outer.column) > 0" для подражания "exists (outer.column)", что было бы, пожалуй, дешевле, так как подсчет все равно отбрасывается.