powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему select count(*) from tablename запрос занимает много время?
25 сообщений из 53, страница 2 из 3
Почему select count(*) from tablename запрос занимает много время?
    #39791123
Glebanski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KahramonЕсли я хочу получить информация именно выбранный период , он занимает больше 30 минут ,
ТС пишет вроде, что у него count еще с условием по периоду, не?
то есть типа
Код: sql
1.
LogEntryDateTime > .... and  LogEntryDateTime < .... 


Может тут проблема, и ему достаточно хинтом как-то поправить дело?
Kahramon, Чего именно хотите то?
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39791125
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlebanskiKahramonЕсли я хочу получить информация именно выбранный период , он занимает больше 30 минут ,
ТС пишет вроде, что у него count еще с условием по периоду, не?
то есть типа
Код: sql
1.
LogEntryDateTime > .... and  LogEntryDateTime < .... 


Может тут проблема, и ему достаточно хинтом как-то поправить дело?
Kahramon, Чего именно хотите то?

товарищ хочет быстро неблокируеще считать кол-во записей по таблице за определенный период (порция данных)


Kahramon, покажите структуру таблицы, индексы и ваш медленный запрос
так же следующее:

Код: sql
1.
2.
3.
4.
select @@version
go
select * from sys.configurations
go
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39791323
Kahramon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо большое что уделили время!
select t1.* from meter_log t1 inner join(select min(date_format) as min_time from meter_log m2 where factory_number=:number and type_id=:typeId and modem_id=:modemId and (date_format between :from and :to) group by convert(varchar,date_format,112))t2 on t1.date_format=t2.min_time where t1.factory_number=:number and t1.type_id=:typeId and t1.modem_id=:modemId
typeId and modem_id are foreign keys. Factory_number and date_format are indexed keys.

Мне нужна взять первые данные за каждый день(втечение выбранного периода ). Тут запрос занемает много времени. В таблице есть где то 1 млрд записи
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39791327
Kahramon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komradGlebanskiпропущено...

ТС пишет вроде, что у него count еще с условием по периоду, не?
то есть типа
Код: sql
1.
LogEntryDateTime > .... and  LogEntryDateTime < .... 


Может тут проблема, и ему достаточно хинтом как-то поправить дело?
Kahramon, Чего именно хотите то?

товарищ хочет быстро неблокируеще считать кол-во записей по таблице за определенный период (порция данных)


Kahramon, покажите структуру таблицы, индексы и ваш медленный запрос
так же следующее:

Код: sql
1.
2.
3.
4.
select @@version
go
select * from sys.configurations
go


Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86) Oct 14 2005 00:33:37 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition on Windows NT 6.0 (Build 6001: Service Pack 1)
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39791334
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KahramonА можно создавать каждый месясь отдельный таблица(log_month_year) и сохранить как ndf(log_month_year.ndf) файл?Можно и так.

Решения ищутся под конкретную задачу, архитектура (и модель данных) проектируется исходя из типичных задач и из бизнес-логики данных.

А вы описали сначала одну задачу (select count(*) from tablename), вам дали решение.
Потом совсем другую задачу (за период)
А сейчас говорите про месяца, а это уже треться задача (когда периоды известны и фиксированны)

Вот для этих трёх задач есть три разных решения, со своими моделями данных, а могут быть и другие задачи, про которые вы пока не сказали.
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39791375
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KahramonMicrosoft SQL Server 2005 - 9.00.1399.06 (Intel X86) Oct 14 2005 00:33:37 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition on Windows NT 6.0 (Build 6001: Service Pack 1)

ого!
чистый 2005 RTM!
не думал, что такие еще встречаются в природе
и не конфигурированный к тому же

покажите
Код: sql
1.
select * from sys.dm_os_sys_info



на таблице есть индексы? заскриптуйте их и саму таблицу (show scripts of the table and its indexes)

покажите план запроса (execution plan)

по поводу запроса: мне кажется что он не совсем корректен, к тому же группировка лишняя
попробуйте альтернативный


Код: 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.
29.
30.
31.
32.
33.
-- your query
SELECT
	t1.*
FROM meter_log t1
INNER JOIN (SELECT
				MIN(date_format) AS min_time
				FROM meter_log m2
			WHERE factory_number = :number
				AND type_id = :typeId
				AND modem_id = :modemId
				AND (date_format BETWEEN :from AND :to)
			GROUP BY CONVERT(varchar, date_format, 112)
			) t2
	ON t1.date_format = t2.min_time
WHERE t1.factory_number = :number
AND t1.type_id = :typeId
AND t1.modem_id = :modemId

-- alternative 1 
SELECT
	t1.*
FROM meter_log t1
WHERE t1.factory_number = :number
AND t1.type_id = :typeId
AND t1.modem_id = :modemId
and  t1.date_format = (SELECT
                                        MIN(date_format) AS min_time
                                   FROM meter_log m2
                                   WHERE factory_number = :number
                                        AND type_id = :typeId
                                        AND modem_id = :modemId
                                        AND (date_format BETWEEN :from AND :to)
						) 
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39791413
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KahramonВсем спасибо большое что уделили время!
select t1.* from meter_log t1 inner join(select min(date_format) as min_time from meter_log m2 where factory_number=:number and type_id=:typeId and modem_id=:modemId and (date_format between declarep by convert(varchar,date_format,112))t2 on t1.date_format=t2.min_time where t1.factory_number=:number and t1.type_id=:typeId and t1.modem_id=:modemId
typeId and modem_id are foreign keys. Factory_number and date_format are indexed keys.

Мне нужна взять первые данные за каждый день(втечение выбранного периода ). Тут запрос занемает много времени. В таблице есть где то 1 млрд записи


Первое, что вам нужно сделать - поучиться писать запросы.

1. Таблица всех дат периода. Можете генерировать прямо перед запросом.
2. Cross apply ( select top(1) * from ... )
3. Индексы получат шанс.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
declare @from datetime = '20190101'
      , @to datetime = '20190201'
;

declare @dates table(dt datetime primary key);

while @from <= @to begin

  insert @dates select @from;

  set @from = @from + 1;

end;

select d.dt, t.*
   from @dates as d
        cross apply( select top(1) * from meter_log as t1 where t1.factory_number=:number and t1.type_id=:typeId and t1.modem_id=:modemId and t1.date_format >= d.dt order by t1.date_format asc ) as t
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39791417
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komradпо поводу запроса: мне кажется что он не совсем корректен, к тому же группировка лишняя
попробуйте альтернативный

Код: 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.
29.
30.
31.
32.
33.
-- your query
SELECT
	t1.*
FROM meter_log t1
INNER JOIN (SELECT
				MIN(date_format) AS min_time
				FROM meter_log m2
			WHERE factory_number = :number
				AND type_id = :typeId
				AND modem_id = :modemId
				AND (date_format BETWEEN :from AND :to)
			GROUP BY CONVERT(varchar, date_format, 112)
			) t2
	ON t1.date_format = t2.min_time
WHERE t1.factory_number = :number
AND t1.type_id = :typeId
AND t1.modem_id = :modemId

-- alternative 1 
SELECT
	t1.*
FROM meter_log t1
WHERE t1.factory_number = :number
AND t1.type_id = :typeId
AND t1.modem_id = :modemId
and  t1.date_format = (SELECT
                                        MIN(date_format) AS min_time
                                   FROM meter_log m2
                                   WHERE factory_number = :number
                                        AND type_id = :typeId
                                        AND modem_id = :modemId
                                        AND (date_format BETWEEN :from AND :to)
						) 



Ты меня пугаешь.
1. Группировка - зло.
2. Группировка большой таблицы - большое зло.
3. Группировка там, где группировка не нужна, - глупость.
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39791425
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222Ты меня пугаешь.
1. Группировка - зло.
2. Группировка большой таблицы - большое зло.
3. Группировка там, где группировка не нужна, - глупость.
у меня группировки нет, она у автора (your query)
я предложил alternative 1
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39791531
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичГулин Федор,

1. Для получения имени схемы есть удобная функция object_schema_name().
2. В таблице может быть более одной партиции.

1+
2 да не учитывается сей момент - проверил на патриционных - 0-ли показывает

schema TableName rows
temp part1 0
temp part1 0
temp part1 0


но скрпит сей полезен в 90% случаев и висит у меня на макросах ибо юзаю я его часто

зы ну вот написали бы рабочий вариант учитывающий 2) и была бы практич. польза людям
я вот навскидку не могу сообразить как по метаданным вытащить сию инфу сразу
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39791545
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федорнаписали бы рабочий вариант учитывающий 2) и была бы практич. польза людямТак в первом ответе написали правильный запрос. 21842488
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39791579
Kahramon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222Первое, что вам нужно сделать - поучиться писать запросы.

1. Таблица всех дат периода. Можете генерировать прямо перед запросом.
2. Cross apply ( select top(1) * from ... )
3. Индексы получат шанс.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
declare @from datetime = '20190101'
      , @to datetime = '20190201'
;

declare @dates table(dt datetime primary key);

while @from <= @to begin

  insert @dates select @from;

  set @from = @from + 1;

end;

select d.dt, t.*
   from @dates as d
        cross apply( select top(1) * from meter_log as t1 where t1.factory_number=:number and t1.type_id=:typeId and t1.modem_id=:modemId and t1.date_format >= d.dt order by t1.date_format asc ) as t



Спасибо Вам. Ваши скрипт уменьшил время но он занимал где то 15 минут. Когда тот запрос запушен другие сервисе не могут записават данный
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39791592
Kahramon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komradKahramonMicrosoft SQL Server 2005 - 9.00.1399.06 (Intel X86) Oct 14 2005 00:33:37 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition on Windows NT 6.0 (Build 6001: Service Pack 1)

ого!
чистый 2005 RTM!
не думал, что такие еще встречаются в природе
и не конфигурированный к тому же

покажите
Код: sql
1.
select * from sys.dm_os_sys_info



на таблице есть индексы? заскриптуйте их и саму таблицу (show scripts of the table and its indexes)

покажите план запроса (execution plan)

по поводу запроса: мне кажется что он не совсем корректен, к тому же группировка лишняя
попробуйте альтернативный


Код: 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.
29.
30.
31.
32.
33.
-- your query
SELECT
	t1.*
FROM meter_log t1
INNER JOIN (SELECT
				MIN(date_format) AS min_time
				FROM meter_log m2
			WHERE factory_number = :number
				AND type_id = :typeId
				AND modem_id = :modemId
				AND (date_format BETWEEN :from AND :to)
			GROUP BY CONVERT(varchar, date_format, 112)
			) t2
	ON t1.date_format = t2.min_time
WHERE t1.factory_number = :number
AND t1.type_id = :typeId
AND t1.modem_id = :modemId

-- alternative 1 
SELECT
	t1.*
FROM meter_log t1
WHERE t1.factory_number = :number
AND t1.type_id = :typeId
AND t1.modem_id = :modemId
and  t1.date_format = (SELECT
                                        MIN(date_format) AS min_time
                                   FROM meter_log m2
                                   WHERE factory_number = :number
                                        AND type_id = :typeId
                                        AND modem_id = :modemId
                                        AND (date_format BETWEEN :from AND :to)
						) 
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39791687
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KahramonСпасибо Вам. Ваши скрипт уменьшил время но он занимал где то 15 минут. Когда тот запрос запушен другие сервисе не могут записават данный

Дарагой, тебе уже говорили: "определение таблицы и индексов давай".
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39791700
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kahramon,


Код: sql
1.
select * from sys.dm_os_sys_info




результат покажите либо картинкой, либо текстом с названием столбцов

гадать какие были колонки в выводе команды на сиквеле 5 поколений назад нет возможности
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39791715
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgГулин Федорнаписали бы рабочий вариант учитывающий 2) и была бы практич. польза людямТак в первом ответе написали правильный запрос. 21842488

ткните пальцем ГДЕ
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT
   Total_Rows= SUM(st.row_count)
FROM
   sys.dm_db_partition_stats st
WHERE
    object_name(object_id) = 'T' AND (index_id < 2);

select COUNT(*) from T;


вот это у меня НЕ пашет - dвы
или про что

Код: sql
1.
SELECT COUNT(*) FROM  <t1> (Nolock) ??? 


ну да но это тормоз на реально большоей таблице

приведенный выше мной скл отрабатывает моментально в независимости от кол-ва записей (ясно что зависит от прав. статистики)
если в таблицах милионы записей ЭТО оч. даже полезно ибо быстро помогает видеть картиену целиком
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39791743
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федорткните пальцем ГДЕ
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT
   Total_Rows= SUM(st.row_count)
FROM
   sys.dm_db_partition_stats st
WHERE
    object_name(object_id) = 'T' AND (index_id < 2);

select COUNT(*) from T;



вот это у меня НЕ пашет - dвыДа, про это.

А что "не пашет"?
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39792757
Kahramon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komradKahramon,


Код: sql
1.
select * from sys.dm_os_sys_info




результат покажите либо картинкой, либо текстом с названием столбцов

гадать какие были колонки в выводе команды на сиквеле 5 поколений назад нет возможности
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39792759
Kahramon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komradKahramon,


Код: sql
1.
select * from sys.dm_os_sys_info




результат покажите либо картинкой, либо текстом с названием столбцов

гадать какие были колонки в выводе команды на сиквеле 5 поколений назад нет возможности
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39792830
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kahramon,

спасибо

и вот это тоже:

Код: sql
1.
2.
3.
select object_name,counter_name,cntr_value/1024 [MB] 
from sys.dm_os_performance_counters
where counter_name like 'T%Server%Memory%'
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39793111
Kahramon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komradKahramon,

спасибо

и вот это тоже:

Код: sql
1.
2.
3.
select object_name,counter_name,cntr_value/1024 [MB] 
from sys.dm_os_performance_counters
where counter_name like 'T%Server%Memory%'
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39793124
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kahramon,

ну что, винда2008 с 8ГБ и 16цпу, сиквел 2005 стандарт RTM съедает половину памяти (3.5ГБ), конфигурирован по умолчанию

неясен размер базы, таблицы meter_log, структура таблицы и индексы по ней

покажите результат отдельными картинками

Код: sql
1.
2.
3.
exec sp_help meter_log
exec sp_helpindex meter_log
exec sp_spaceused meter_log
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39793159
Kahramon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komradKahramon,

ну что, винда2008 с 8ГБ и 16цпу, сиквел 2005 стандарт RTM съедает половину памяти (3.5ГБ), конфигурирован по умолчанию

неясен размер базы, таблицы meter_log, структура таблицы и индексы по ней

покажите результат отдельными картинками

Код: sql
1.
2.
3.
exec sp_help meter_log
exec sp_helpindex meter_log
exec sp_spaceused meter_log
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39793165
Kahramon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komradKahramon,
Код: sql
1.
exec sp_spaceused meter_log
...
Рейтинг: 0 / 0
Почему select count(*) from tablename запрос занимает много время?
    #39793380
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komradKahramon,

ну что, винда2008 с 8ГБ и 16цпу, сиквел 2005 стандарт RTM съедает половину памяти (3.5ГБ), конфигурирован по умолчанию

неясен размер базы, таблицы meter_log, структура таблицы и индексы по ней

покажите результат отдельными картинками

Код: sql
1.
2.
3.
exec sp_help meter_log
exec sp_helpindex meter_log
exec sp_spaceused meter_log



Лечим геморрой горчичниками?

ЗЫ. Никакое оборудование не исправит кривого запроса/таблицы.
...
Рейтинг: 0 / 0
25 сообщений из 53, страница 2 из 3
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему select count(*) from tablename запрос занимает много время?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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