У меня есть таблица со следующим определением:
CREATE TABLE [dbo].[Transactions]
(
[ID] [varchar](18) NOT NULL,
[TIME_STAMP] [datetime] NOT NULL,
[AMT] [decimal](18, 4) NOT NULL,
[CID] [varchar](90) NOT NULL,
[DEPARTMENT] [varchar](4) NULL,
[SOURCE] [varchar](14) NULL,
PRIMARY KEY NONCLUSTERED
(
[ID] ASC
)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Таблица содержит 75 миллионов строк. Почему-то это занимает 20 ГБ дискового пространства!
Следующие 2 запроса ...
SELECT
SUM(AMT)
FROM
Transactions
WHERE
TIME_STAMP >= '2017-11-11 00:00:00' AND
TIME_STAMP < '2017-11-12 00:00:00'
SELECT
COUNT(DISTINCT(CID))
FROM
Transactions
WHERE
TIME_STAMP >= '2017-11-11 00:00:00' AND
TIME_STAMP < '2017-11-12 00:00:00'
... каждый занимает около 2 минут, чтобы бежать!
Кстати, у таблицы есть «Clustered ColumnStore Index», которую я не могу удалить, так как в прошлый раз, когда я пытался удалить ее, произошел сбой DROP из-за недостатка места на диске. На жестком диске, на котором хранятся данные, после сжатия БД 28 ГБ освобождаются от 50 ГБ.
Посоветуйте, пожалуйста, что мне нужно сделать, какие индексы мне нужно создать, с какими настройками оптимизировать производительность этих запросов и ПОЧЕМУ, чтобы я и другие могли понимать и учиться.
Кроме того, что, если мне также необходимо указать DEPARTMENT и SOURCE в некоторых предложениях WHERE? Эти столбцы имеют только несколько различных значений.
Спасибо!