Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
Darooma
Member

Откуда:
Сообщений: 758
Что быстрее?
28 июл 11, 12:34    [11038923]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
Glory
Member

Откуда:
Сообщений: 104751
select 1 всех сделает
28 июл 11, 12:34    [11038929]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
А что быстрее - логарифм или синус?
Ведь обычно всё равно, что считать!
28 июл 11, 12:51    [11039087]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
Raoul
Member

Откуда:
Сообщений: 177
Glory
select 1 всех сделает

select sum(1), надо полагать?
28 июл 11, 12:57    [11039143]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
select 1
Guest
Raoul
Glory
select 1 всех сделает

select sum(1), надо полагать?

нет, просто
select 1
28 июл 11, 13:02    [11039179]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Raoul
Glory
select 1 всех сделает

select sum(1), надо полагать?

Нет. Именно select 1. Ведь предложенные агрегаты могут вернуть разные значения. Т.е. автора темы по всей видимости результат не интересует, а интересует просто самый быстрый запрос
28 июл 11, 13:03    [11039188]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
Raoul
Member

Откуда:
Сообщений: 177
iap,

синус быстрее, там ряд проще ;) вот арксинус и логарифм - примерно одинаково, это одного поля ягоды.
28 июл 11, 13:07    [11039218]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
Darooma
Member

Откуда:
Сообщений: 758
up
28 июл 11, 15:23    [11040060]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
все случаи одинаковы, с точностью до плюс-минус погрешности.
28 июл 11, 15:26    [11040092]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
Ray D
Member

Откуда: from the middle of nowhere
Сообщений: 3598
Блог
Ну кроме COUNT(ColumnName)
28 июл 11, 15:48    [11040299]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Ray D
Ну кроме COUNT(ColumnName)

с точностью до плюс-минус погрешности, ибо проверка ColumnName на null - не такая уж и сложная/затратная операция по сравнению с задачей извлечения данных для подсчета
28 июл 11, 16:02    [11040406]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
Ray D
Member

Откуда: from the middle of nowhere
Сообщений: 3598
Блог
Не, я к тому, что оно может отличное значение вернуть
28 июл 11, 16:13    [11040456]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
COUNT(*) и остальные COUNT(...) - это разные функции, возвращающие разный результат.
Как синус и логарифм.
Сравнивать их по скорости бессмысленно. IMHO.

Darooma, COUNT(*) возвращает общее количество строк,
А COUNT(выражение) - количество строк, для которых выражение IS NOT NULL
28 июл 11, 16:17    [11040480]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Ray D
Не, я к тому, что оно может отличное значение вернуть

ну, это да.
но с т.з. производительности...
28 июл 11, 16:17    [11040484]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
Raoul
Member

Откуда:
Сообщений: 177
locky
Ray D
Не, я к тому, что оно может отличное значение вернуть

ну, это да.
но с т.з. производительности...

Самое забавное, что и SELECT SUM(1) по моим прогонам имеет практически ту же производительность
28 июл 11, 16:19    [11040496]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Raoul
locky
пропущено...

ну, это да.
но с т.з. производительности...

Самое забавное, что и SELECT SUM(1) по моим прогонам имеет практически ту же производительность

ну так операции сложения - они не самые медленные, знаете ли...
вот count(distinct )- тут бы да, а так... что так, что так прибавить единичку - много ресурсов не требуется
28 июл 11, 16:36    [11040624]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
Darooma
Member

Откуда:
Сообщений: 758
iap
COUNT(*) и остальные COUNT(...) - это разные функции, возвращающие разный результат.
Как синус и логарифм.
Сравнивать их по скорости бессмысленно. IMHO.

Darooma, COUNT(*) возвращает общее количество строк,
А COUNT(выражение) - количество строк, для которых выражение IS NOT NULL


В каком случае COUNT('') или COUNT(1) могут вернуть значения, отличные от COUNT(*)? Если нет таких ситуаций, то что быстрее из этого?
28 июл 11, 22:11    [11042088]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
Cам же отквотил в каких случаях
28 июл 11, 22:16    [11042100]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31962
Darooma
Если нет таких ситуаций, то что быстрее из этого?
Нету, одинаково.
28 июл 11, 22:30    [11042148]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 726
locky
Ray D
Не, я к тому, что оно может отличное значение вернуть

ну, это да.
но с т.з. производительности...

какой смысл сравнивать производительность запросов, которые возвращают разный результат?
28 июл 11, 23:30    [11042385]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Darooma
iap
COUNT(*) и остальные COUNT(...) - это разные функции, возвращающие разный результат.
Как синус и логарифм.
Сравнивать их по скорости бессмысленно. IMHO.

Darooma, COUNT(*) возвращает общее количество строк,
А COUNT(выражение) - количество строк, для которых выражение IS NOT NULL


В каком случае COUNT('') или COUNT(1) могут вернуть значения, отличные от COUNT(*)? Если нет таких ситуаций, то что быстрее из этого?
Выражение, независящее от полей таблицы, вычислится один раз на весь запрос.
Разница времени вычисления разных выражений составит нано©екунды.
Не стоит забивать себе голову такой ерундой.
29 июл 11, 10:01    [11043219]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
Darooma
Member

Откуда:
Сообщений: 758
какой смысл сравнивать производительность запросов, которые возвращают разный результат?


Нету, одинаково.


Одинаковый или разный?
29 июл 11, 14:17    [11045233]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31962
Darooma
какой смысл сравнивать производительность запросов, которые возвращают разный результат?


Нету, одинаково.


Одинаковый или разный?
Я на ваш вопрос отвечал. В том случае одинаковый.

А первая цитата относилась к другому вопросу, там разный.

Вы же несколько функций привели. Некоторые из них дают одинаковый результат, некоторые другой.
29 июл 11, 14:56    [11045519]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
Валдай
Member

Откуда:
Сообщений: 113
решил проверить, что же быстрее. Делал так:
IF OBJECT_ID('tempdb..#t', 'U') IS NULL BEGIN
  CREATE TABLE #t 
  (
   id int PRIMARY KEY,
   value int NULL
  )

  CREATE UNIQUE INDEX ix1 ON #t(value) WHERE value IS NOT NULL
  
  ;WITH i AS 
  (
    SELECT i=1 UNION ALL SELECT i+1 FROM i WHERE i<1000000
  )
  INSERT #t
  SELECT i, value = case when i%2=0 THEN i END 
  FROM i 
  OPTION (MAXRECURSION 0)
END
GO
SET NOCOUNT ON
GO
SET STATISTICS TIME ON
GO
--1
SELECT COUNT(*) FROM #t
GO
--2
SELECT COUNT(1) FROM #t
GO
--3
SELECT COUNT('') FROM #t
GO
--4
SELECT SUM(1) FROM #t
GO
--5
SELECT COUNT([value]) FROM #t
GO
--6
SELECT COUNT(*) FROM #t WHERE [value] IS NOT NULL
получилось:
вариант 1,2,3 практически идентичны
4 - медленнее
сравнение 5 и 6 откровенно разочаровало. count([value]) совершенно игнорирует индекс по полю.
29 июл 11, 18:04    [11046856]     Ответить | Цитировать Сообщить модератору
 Re: COUNT('') или COUNT(*) или COUNT(1) или COUNT(ColumnName)  [new]
Darooma
Member

Откуда:
Сообщений: 758
Валдай,

как именно ты это проверил? Как измерил время?
1 авг 11, 00:58    [11050907]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить