我有这个问题
;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 !=''
每天它包含 10 到 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
。请注意,此选项默认情况下未启用,但通常建议使用。如果您在加载表格后立即查询表格,则此选项可能会有问题。