約 2.500.000 レコードのテーブルを持つデータベースがあります。テストする 2 つの異なるクエリを使用して、約 150.000 レコードを取得しています。最初のものは、30 秒から 1 分の間の結果を返します。しかし、2 番目のものは 3 ~ 4 分で応答しますが、これは非常に奇妙です。唯一の変更点は、最初のものはパラメーターを使用しませんが、2番目のものは使用することです。どちらも C# から実行しています。セキュリティ上の問題で、パラメーター化されたものを使用したいのですが、なぜそんなに時間がかかるのか理解できませんでした。どんな助けでも大歓迎です。
最初のクエリ:
DECLARE @page INT=3
DECLARE @pagesize INT=300
string sql = "SELECT Col1,Col2,Col3 FROM
(SELECT ROW_NUMBER() OVER(ORDER BY Col1) AS rownumber,Col1,Col2,Col3";
sql += " FROM my_table WHERE Col1 LIKE '" + letter + "%') as somex
WHERE rownumber >= (@page-1)*(@pagesize)";
sql += "AND rownumber <=(@page)*@pagesize;
SELECT COUNT(*) FROM my_table WHERE col1 LIKE '" + letter + "%'";
2 番目のクエリ:
DECLARE @page INT=3
DECLARE @pagesize INT=300
DECLARE @starting VARCHAR(10)='be'
string sql = "SELECT Col1,Col2,Col3FROM
(SELECT ROW_NUMBER() OVER(ORDER BY Col1) AS rownumber,Col1,Col2,Col3";
sql += " FROM my_table WHERE Col1 LIKE @letter+'%') as somex
WHERE rownumber >= (@page-1)*(@pagesize)";
sql += "AND rownumber <=(@page)*@pagesize; SELECT COUNT(*)
FROM my_table WHERE col1 LIKE @letter+'%'";
私のサーバーは 16GB RAM、4 つの実際の 4 つの仮想 CPU、Sata ディスクです。
編集: Col1 はクラスター化インデックスと非クラスター化インデックスです。
進捗状況:これらのクエリが別のサーバーでうまく機能することがわかりました。しかし、これは私をもっと混乱させます。SQL Server の設定でしょうか。