我有这个查询
;WITH --first CTE is your data set example
CTE
AS
(
SELECT *
FROM (VALUES
('2023-04-06', 0029, 'D', 'ABCD', 1, 100),
('2023-04-06', 0027, 'D', 'ABCD', 1, 200),
('2023-04-06', 0044, 'D', 'ABCD', 1, 300),
('2023-04-06', 0042, 'D', 'ABCD', 1, 400),
('2023-04-06', 0029, 'C', 'ABCD', 1, 500),
('2023-04-06', 0069, 'C', 'ABCD', 1, 600),
('2023-04-06', 0067, 'C', 'XXCD', 1, 700),
('2023-04-06', 0089, 'C', 'ABCD', 1, 800),
('2023-04-06', 0079, 'C', 'XXCD', 1, 900),
('2023-04-06', 0084, 'C', 'ABCD', 1, 1000)) AS T([BOOKING_DATE],[TIME_INTERVAL],[DB_CR_CODE],[CHANNEL],[NBR_OF_TXN],[AMOUNT])
),
CTE2 --aggregate data
AS
(
SELECT
booking_date, interval, product_group1, product_group2,
SUM(nbr_of_txn) AS nbr_txn, SUM(amount) AS amount
FROM
(SELECT
BOOKING_DATE,
CASE
WHEN TIME_INTERVAL BETWEEN 0000 AND 0030 THEN 1
WHEN TIME_INTERVAL BETWEEN 0031 AND 0060 THEN 2
WHEN TIME_INTERVAL BETWEEN 0061 AND 0090 THEN 3
ELSE 99
END AS interval,
CASE
WHEN DB_CR_CODE = 'C' THEN 'Credit'
WHEN DB_CR_CODE = 'D' THEN 'Debit'
ELSE ''
END AS PRODUCT_GROUP1,
CASE
WHEN DB_CR_CODE = 'C' AND CHANNEL = 'ABCD' THEN 'Credit_ABCD'
ELSE ''
END AS PRODUCT_GROUP2,
NBR_OF_TXN, AMOUNT
FROM
CTE) a
GROUP BY booking_date, interval, PRODUCT_GROUP1, PRODUCT_GROUP2
)
--UNION from CTE2
SELECT booking_date, interval, product_group1, nbr_txn, amount
FROM CTE2
WHERE product_group1 !=''
UNION ALL
SELECT booking_date, interval, product_group2, nbr_txn, amount
FROM CTE2
WHERE product_group2 !=''
每天包含1000万到1500万条记录。当我运行它一天,它立即进入暂停状态。我在3.5小时后取消了它
输入图片描述
由于SELECT (STATMAN),它看起来像是阻塞了自己。
输入图片描述
SELECT(STATMAN)是什么?为什么它这样做,而我只是在阅读。如何解决这个问题?
我希望有人能帮忙。小补充:最后,该查询将嵌入到视图中。
的问候罗恩
使用SSMS v18.2.1
SELECT (STATMAN)
是一个统计更新。当你从一个表中读取数据时,如果统计数据需要更新,这通常被设置为自动发生,但默认情况下将同步发生(即你需要等待它)。
您有多个选项:
- 关闭使用
SET AUTO_CREATE_STATISTICS OFF
自动创建统计信息。建议您手动创建自己的统计数据。 - 在单个统计对象上使用
SET AUTO_UPDATE_STATISTICS OFF
或NO_RECOMPUTE
关闭自动统计更新。这是不可取的,除非你知道你在做什么,你需要有一些过程来手动或定期更新它们。 - 设置统计数据异步更新,这样您的查询就不必等待,使用
SET AUTO_UPDATE_STATISTICS_ASYNC ON
。请注意,默认情况下不启用此选项,但通常建议使用此选项。如果您在加载表后立即查询表,此选项可能会有问题。