2
我有兩個約130萬行的表的簡單連接的AutoQuery設置。使用內置的迷你分析器來測量SQL時序,返回前100行(無過濾)的查詢需要3ms,計數需要額外的341ms。您可以禁用ServiceStack AutoQuery的計數(總計)嗎?
是否可以使用自動查詢而不提取計數?我實際上不需要知道完整的計數。
編輯
所以我在想,找出是否有剩餘VS滿計數可能會更快更行。我使用SSMS針對我們的MSSQL數據庫測試了這一點。
--Generated by ServiceStack
set statistics time on
SELECT COUNT(*) "COUNT(*)"
FROM "table1" INNER JOIN "table2" ON
("table1"."PrimaryKey" = "table2"."ForeignKey")
set statistics time off
--Skipping 100
set statistics time on
SELECT CASE WHEN EXISTS(
SELECT "table1"."PrimaryKey"
FROM "table1" INNER JOIN "table2" ON
("table1"."PrimaryKey" = "table2"."ForeignKey")
ORDER BY "table1"."PrimaryKey" OFFSET 100 ROWS FETCH NEXT 1 ROWS ONLY
)
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT) END
set statistics time off
--Skipping 100000
set statistics time on
SELECT CASE WHEN EXISTS(
SELECT "table1"."PrimaryKey"
FROM "table1" INNER JOIN "table2" ON
("table1"."PrimaryKey" = "table2"."ForeignKey")
ORDER BY "table1"."PrimaryKey" OFFSET 100000 ROWS FETCH NEXT 1 ROWS ONLY
)
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT) END
set statistics time off
--Skipping 1000000
set statistics time on
SELECT CASE WHEN EXISTS(
SELECT "table1"."PrimaryKey"
FROM "table1" INNER JOIN "table2" ON
("table1"."PrimaryKey" = "table2"."ForeignKey")
ORDER BY "table1"."PrimaryKey" OFFSET 1000000 ROWS FETCH NEXT 1 ROWS ONLY
)
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT) END
set statistics time off
輸出:
(1 row(s) affected)
SQL Server Execution Times:
CPU time = 203 ms, elapsed time = 200 ms.
(1 row(s) affected)
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.
(1 row(s) affected)
SQL Server Execution Times:
CPU time = 16 ms, elapsed time = 19 ms.
(1 row(s) affected)
SQL Server Execution Times:
CPU time = 203 ms, elapsed time = 193 ms.
我添加了一些關於如何提高大數據集分頁性能的時間細節。 –
@AnonyCarl時間很有趣,但並沒有報告最終用戶喜歡看到的行數,只能用於MSSQL。但是如果你想在你的回覆中包含它,你應該可以在[Custom ResponseFilter](https://github.com/ServiceStack/ServiceStack/wiki/AutoQuery-RDBMS#autoquery-response-filters )。 – mythz