![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
count (таблица.*) [FB]
Цукор5 © (2011-08-29 13:01:00)Как-то подзабыл синтаксис. Как писать правильно?
Здесь все работает.
select COUNT(*), IdName from Table1 group by IdName
А здесь не работает.
select count( t1.*), t2.Name from Table1 t1, Table2 t2 where t1.IdName=t2.Id group by t2.name
Anatoly Podgoretsky (2011-09-06 16:21:00) [1]> Vitalts (06.09.2011 14:19:20) [20]
Откуда? Должна подверждать. Не может быть со сравнением и без быть
одинаково, особенно на крупной таблице.
Vitalts (2011-09-06 14:19:00) [2]Практика этого не подтверждает. Сравнение естественно есть, но поскольку значение статическое, то лишь единожды.
Anatoly Podgoretsky (2011-09-06 13:45:00) [3]> Vitalts (06.09.2011 13:32:18) [18]
<статическое значение> это и есть указание поля, значит медленнее.
Vitalts (2011-09-06 13:32:00) [4]Хм, по поводу count(*) был не прав, учитывает все записи без разбора, соответсвенно должно также быстро работать как и count(<статическое значение>)
Anatoly Podgoretsky (2011-09-06 12:29:00) [5]> Vitalts (06.09.2011 08:44:15) [15]
Противоречит большинству СУБД и стандарту. Если поле указано, а оно указано
в каноническом виде, то обязано проверять, или это какая то кривая СУБД
Игорь Шевченко (2011-09-06 12:26:00) [6]
> count(1) (или другое статическое число) считает кол-во
> записей без проверок NULL значений, потому и быстрее.
а в * что на NULL проверяется ?
SQL> CREATE TABLE foo (
2 bar int
3 );
Table created.
SQL>
SQL> INSERT INTO foo VALUES (NULL);
1 row created.
SQL> INSERT INTO foo VALUES (NULL);
1 row created.
SQL> INSERT INTO foo VALUES(10);
1 row created.
SQL> COMMIT;
Commit complete.
SQL> SELECT COUNT(*) FROM foo;
COUNT(*)
----------
3
SQL> SELECT COUNT(1) FROM foo;
COUNT(1)
----------
3
SQL> SELECT COUNT(bar) FROM foo;
COUNT(BAR)
----------
1
Vitalts (2011-09-06 08:44:00) [7]count(1) (или другое статическое число) считает кол-во записей без проверок NULL значений, потому и быстрее.
[quote]
Таки наверное не любое, а уникальное? Иначе, ИМХО, можно получить странное.[/quote]
Вот это странное - и есть count() полю, содержадему NULL значения, он возвращает кол-во не нулевых значений этого поля, а не общее кол-во записей.
Anatoly Podgoretsky (2011-09-06 08:39:00) [8]> Игорь Шевченко (05.09.2011 16:54:13) [13]
А должно медленнее, ведь при этом подсчеты требуются дополнительные
действия, проверка на NULL
Игорь Шевченко (2011-09-05 16:54:00) [9]
> Count(1), кстати, работает быстрее, нежели count(*)
Почему ?
Vitalts (2011-09-05 15:41:00) [10]Count(1), кстати, работает быстрее, нежели count(*)
Vitalts (2011-09-05 15:34:00) [11]Count не учитывает NULL значения, посему, либо по полю, в котором наверняка не пустые значения, либо, что мне больше всего импонирует count(1)
Anatoly Podgoretsky (2011-08-30 22:48:00) [12]> Игорь Шевченко (30.08.2011 19:56:09) [9]
Слава богу, что основные сервера как правило не отличаются от стандарта, в
основном добавлением своих функций, count у всех работает одинаково, по
стандарту.
Игорь Шевченко (2011-08-30 19:56:00) [13]
> Ну я многое видел в MySQL которое не то что не по стандарту,
> а резко
> отличается даже от здравого смысла.
Еще были всякие Raima (Velocis), Gupta и прочие со своими изобретениями.
Anatoly Podgoretsky (2011-08-30 19:02:00) [14]> Игорь Шевченко (29.08.2011 22:52:07) [7]
Ну я многое видел в MySQL которое не то что не по стандарту, а резко
отличается даже от здравого смысла.
Игорь Шевченко (2011-08-29 22:52:00) [15]Вроде как поведение COUNT в стандарте чуть ли не с SQL-86 описано и все производители DBMS этого стандарта придерживаются
Anatoly Podgoretsky (2011-08-29 16:58:00) [16]
> Там оказывается нужно поставить вместо звезды любое поле
> и всё заработает.
Результаты могут быть совсем другие.
Anatoly Podgoretsky (2011-08-29 16:57:00) [17]
> Таки наверное не любое, а уникальное? Иначе, ИМХО, можно
> получить странное.
Так разницы не будет по сравнению со звездочкой
Sergey13 (2011-08-29 14:04:00) [18]> [3] Кщд (29.08.11 13:52)
Сейчас проверил - вроде и на самом деле любое можно. Но почему то по привычке уже count(id) всегда ставлю на автомате в подобных случаях.
Кщд (2011-08-29 13:52:00) [19]>Sergey13 © (29.08.11 13:27) [2]
>Таки наверное не любое, а уникальное?
почему?
Sergey13 (2011-08-29 13:27:00) [20]> [1] Цукор5 (29.08.11 13:18)
> Там оказывается нужно поставить вместо звезды любое поле и всё заработает.
Таки наверное не любое, а уникальное? Иначе, ИМХО, можно получить странное.