상단으로 쿼리의 총 행 카운트를 검색하는 방법
-
03-07-2019 - |
문제
SQL Server 2008 쿼리가 있습니다
SELECT TOP 10 *
FROM T
WHERE ...
ORDER BY ...
나는 또한 행의 총 수를 얻고 싶습니다. 비정상적인 방법은 두 번째 쿼리를 만드는 것입니다
SELECT COUNT(*)
FROM T
WHERE ...
ORDER BY ...
효율적인 방법이 있습니까?
감사
해결책
두 번째 쿼리를 원하십니까?
SELECT TOP 10
*, foo.bar
FROM
T
CROSS JOIN
(SELECT COUNT(*) AS bar FROM T WHERE ...) foo
WHERE
...
ORDER BY
...
또는
DECLARE @bar int
SELECT @bar = COUNT(*) AS bar FROM T WHERE ...
SELECT TOP 10
*, @bar
FROM
T
CROSS JOIN
(SELECT COUNT(*) AS bar FROM T WHERE ...) foo
WHERE
...
ORDER BY
...
또는 (편집 : 사용)
WITH cTotal AS
(
SELECT COUNT(*) AS bar FROM T WHERE ...)
)
SELECT TOP 10
*, cTotal .bar
FROM
T
WHERE
...
ORDER BY
...
다른 팁
이 답변에있는 것은 작동하는 것 같습니다.
https://stackoverflow.com/a/19125458/16241
기본적으로 당신은 다음을 수행합니다.
SELECT top 100 YourColumns, TotalCount = Count(*) Over()
From YourTable
Where SomeValue = 32
TotalCount에는 총 행 수가 있습니다. 그래도 각 행에 나열되어 있습니다.
이것을 테스트했을 때 쿼리 계획은 테이블이 한 번만 치는 것으로 나타났습니다.
두 번째 쿼리에서도 순서 별 절을 제거하십시오.
아니.
SQL Server
유지하지 않습니다 COUNT(*)
메타 데이터와 같은 MyISAM
, 그것은 매번 그것을 계산합니다.
업데이트: 견적이 필요한 경우 통계 메타 데이터를 사용할 수 있습니다.
SELECT rows
FROM dbo.sysindexes
WHERE name = @primary_key,
어디 @primary_key
테이블의 기본 키 이름입니다.
이것은 반환합니다 COUNT(*)
마지막 통계 업데이트에서.
SELECT TOP (2) *,
(SELECT COUNT(*) AS Expr1 FROM T) AS C
FROM T
제휴하지 않습니다 StackOverflow