2

約 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 の設定でしょうか。

4

1 に答える 1