私は約130万行の2つのテーブルの単純な結合に対してAutoQueryをセットアップしました。ミニプロファイラを使用してSQLタイミングを測定すると、最初の100行(フィルタリングなし)を返すクエリは3ms、カウントはさらに341msかかる。ServiceStack AutoQueryのカウント(合計)を無効にできますか?
カウントを取得せずにAutoQueryを使用できますか?私は実際にフルカウントを知る必要はありません。
EDITは、だから私は速いかもしれフルカウント対残りの複数の行があるかどうかを見つけることを考えていました。私はタイミングの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.
大きなデータセットに対してページングのパフォーマンスを向上させる方法についていくつかのタイミングの詳細を追加しました。 –
@AnthonyCarlタイミングは興味深いですが、エンドユーザーが行をページングするのが好きで、MSSQLでしか動作しない合計を報告しません。しかし、それをあなたの応答に含めるには、[Custom ResponseFilter](https://github.com/ServiceStack/ServiceStack/wiki/AutoQuery-RDBMS#autoquery-response-filters)の応答にこれを追加する必要があります。 )。 – mythz