powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / select * vs select count(*)
13 сообщений из 63, страница 3 из 3
select * vs select count(*)
    #39728763
архивариус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

т.к. вопрос про сферических коней в вакууме позволю ответ:
...
Рейтинг: 0 / 0
select * vs select count(*)
    #39728771
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
архивариусquestioner,

т.к. вопрос про сферических коней в вакууме позволю ответ:

А можете как-то прокомментировать почему ColumnStore index scan в случае count(*) - 18%, а в случае select * - 100%

Это как-то связано с тем, что для страниц полностью забитых записями можно взять размер и получим count на странице?
...
Рейтинг: 0 / 0
select * vs select count(*)
    #39728783
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

одна операция всегда занимает 100% общего времени.

Интересует чисто время на подготовку ответа.
А в чем интерес-то? Практической пользы в таком любопытстве ноль. Описанный сценарий физически не существует, а только в воображении.
...
Рейтинг: 0 / 0
select * vs select count(*)
    #39728794
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосовquestioner,

одна операция всегда занимает 100% общего времени.

Интересует чисто время на подготовку ответа.
А в чем интерес-то? Практической пользы в таком любопытстве ноль. Описанный сценарий физически не существует, а только в воображении.

ааа, понятно.

А почему вроде как одна и та же операция в плане в первом случае проходит в 10+ раз быстрее?

Практической пользы нет, зато есть теоретическая.
...
Рейтинг: 0 / 0
select * vs select count(*)
    #39728799
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
даже не просто 10+, а 64
...
Рейтинг: 0 / 0
select * vs select count(*)
    #39728800
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerдаже не просто 10+, а 64
медсестра-теоретитк?
...
Рейтинг: 0 / 0
select * vs select count(*)
    #39728803
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaKquestionerдаже не просто 10+, а 64
медсестра-теоретитк?
язык слишком длинный что ли?
...
Рейтинг: 0 / 0
select * vs select count(*)
    #39728873
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

наверху запрос в несколько потоков и нет выгрузки.
...
Рейтинг: 0 / 0
select * vs select count(*)
    #39728874
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
set statistics io on
 set statistics time on 
select count(*) from master.dbo.spt_values
set statistics io off
 set statistics time off 
-----------------
Table 'spt_values'. Scan count 1, logical reads 14, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 1 ms.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.
--------------------
-------------------
 set statistics io on
 set statistics time on 
select *from master.dbo.spt_values
set statistics io off
 set statistics time off 
------------------------
Table 'spt_values'. Scan count 1, logical reads 17, physical reads 1, read-ahead reads 15, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 81 ms.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.
...
Рейтинг: 0 / 0
select * vs select count(*)
    #39728885
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLexalexeyvgпропущено...
Лучше сказать "безусловно никогда".
пропущено...
Для подсчёта в самом худшем случае (без узких индексов) на сервере нужно будет считать все страницы, подсчитывая количество записей.
А на клиенте нужно будет передать эти страницы на клиента через клиентские библиотеки доступа, потом ена клиенте их посчитать.
Вопрос был о

время_необходимое_на_ чтение_данных _для_select_*
VS
время_необходимое_на_ чтение_данных _для_select_count(*)А, понял, я держал в уме исходный вопрос, "Подскажите, пожалуйста, что должно выполняться быстрее и почему?", перепутал.
...
Рейтинг: 0 / 0
select * vs select count(*)
    #39728929
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxx
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
set statistics io on
 set statistics time on 
select count(*) from master.dbo.spt_values
set statistics io off
 set statistics time off 
-----------------
Table 'spt_values'. Scan count 1, logical reads 14, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 1 ms.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.
--------------------
-------------------
 set statistics io on
 set statistics time on 
select *from master.dbo.spt_values
set statistics io off
 set statistics time off 
------------------------
Table 'spt_values'. Scan count 1, logical reads 17, physical reads 1, read-ahead reads 15, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 81 ms.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.



Получается, что в случае select count(*)
- на 3 логических чтения меньше(17 против 14)
- на 1 физических чтений меньше(1 против 0)
- на 15 чтений read-ahead меньше (15 против 0)


Я так понимаю логическое чтение это чтение из кеша. Почему для count их меньше?
Физическое чтение видимо нужно для формирование ответа?

read-ahead как я понял это что-то типа упреждающего чтения вперёд. Не понятно почему оно должно отличаться при этих запросах.
...
Рейтинг: 0 / 0
select * vs select count(*)
    #39728963
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerПолучается, что в случае select count(*)
- на 3 логических чтения меньше(17 против 14)
- на 1 физических чтений меньше(1 против 0)
- на 15 чтений read-ahead меньше (15 против 0)read-ahead и physical будут случайно меняться, на них не смотрите.
А логическое чтение для * будет стабильно больше. Не знаю почему, может, серверу нужно прочитать метаданные колонок?

Понятно, что разница в чтении небольшая, если только не делается распараллеливание, или не читаются LOB поля. Основное различие по исходному вопросу - необходимость передачи данных на клиента, через несколько программных слоёв, вот это замедлит запрос в много раз.
...
Рейтинг: 0 / 0
select * vs select count(*)
    #39729032
архивариус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerархивариусquestioner,

т.к. вопрос про сферических коней в вакууме позволю ответ:

А можете как-то прокомментировать почему ColumnStore index scan в случае count(*) - 18%, а в случае select * - 100%

1. иконки разные
2. 18% от 8% и 100% от 92%
...
Рейтинг: 0 / 0
13 сообщений из 63, страница 3 из 3
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / select * vs select count(*)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]