Что является наименее дорогостоящей агрегатной функцией при отсутствии ЛЮБОГО()

Я обычно использую 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)", что было бы, пожалуй, дешевле, так как подсчет все равно отбрасывается.