0

誰もが私にもっと具体的に言ってほしいと思っています。asp classic および ms-access データベースでページネーションを行おうとしています。これは、ページ 2 のアイテムを取得するために使用しているクエリです。1 ページあたり 25 個のアイテムがあり、クエリが約 500 以上のような大きなデータ セットを返す場合、実行に約 20 秒以上かかります。はい、sku のインデックスを作成しましたより高速なクエリ。助言がありますか。

SELECT TOP 25 *
FROM catalog
WHERE sku LIKE '1W%'
AND sku NOT IN (SELECT TOP 25 sku
                FROM catalog
                WHERE sku LIKE '1W%' ORDER BY price DESC ) ORDER BY price DESC
4

5 に答える 5

2

TOP役に立たないORDER BYか、少なくとも奇妙に見えます。このサブクエリを使用するつもりだったと思います:

( SELECT TOP 25 sku
  FROM catalog
  WHERE sku LIKE '1W%' 
  ORDER BY sku
)

skuない場合は、 にインデックスを追加します。

Access の場合、クエリを書き換える可能性があります。

SELECT *
FROM catalog
WHERE sku LIKE '1W%'
AND sku >= ( SELECT MAX(sku)
             FROM ( SELECT TOP 26 sku
                    FROM catalog
                    WHERE sku LIKE '1W%' 
                    ORDER BY sku 
                  )
           )

SQL-Server を使用している場合は、このタイプのクエリにウィンドウ関数を使用できます。

于 2012-05-01T01:50:40.987 に答える
1

いくつかのポインタ:

  • ORDER BYSELECT BOTTOM (n)を使用して逆にすることで、をシミュレートできます。TOP (n)
  • ネストされたSELECTを使用できます(一時テーブルの作成)

したがって、「ページング」クエリの最終結果は次のようになります(後続のページでは50を75、100、125、...に置き換えます)。

SELECT TOP 25 *
FROM
(
SELECT TOP 50 *
FROM  catalog
WHERE sku LIKE '1W%'
ORDER BY price desc
)
TEMP
ORDER BY price asc;

データにインデックスを付けたとおっしゃいましたが、完全に明確にするために、最適なパフォーマンスを得るには、すべてのテーブルがクエリに対して適切にインデックス付けされていることを確認する必要があります。この場合、少なくともクエリに含まれる2つの列をお勧めます。

CREATE INDEX IX_CATALOG ON CATALOG (SKU, PRICE);
于 2012-05-08T06:51:54.477 に答える
0
SELECT sku
FROM catalog
WHER sku LIKE '1W%
ORDER BY __SOME COLUMN __
LIMIT 10000 OFFSET 25

これは、行25(OFFSET 25)の後にあるデータベース内のすべての行*を返します。

*LIMIT 10000結果のクエリを10000タプル(行)に制約します。

ランダムOFFSETにならないようにするには、いくつかの列で並べ替える必要があります。

于 2012-05-01T02:21:16.340 に答える
0

列 sku にインデックスを作成します (有効な場合は一意にします)。テーブルには何行ありますか?

于 2012-05-01T01:20:43.353 に答える
0

あなたがしようとしているのは、最初の 25 行以外の、特定の基準を満たすすべての行をテーブルから選択することです。残念ながら、さまざまなデータベース管理システムには、この種のことを行うための独自の構文があります。

ウィキペディアの SQL select ステートメントのページには、さまざまな構文に関する優れた調査があります。

例を挙げると、MySQL では、SELECT ステートメントの LIMIT 句を使用して、返す行数とオフセットを指定できます。

SELECT *
FROM catalog
WHERE sku LIKE '1W%'
ORDER by id
LIMIT 25, 9999999999

これは、クエリ結果の行 26 から 9999999999 を返します。

于 2012-05-01T00:24:24.673 に答える