こんにちは、私はhttp://domasmituzas.files.wordpress.com/2011/09/mysqluc2008-mysql-web.pdfを読ん でいて、「良いページングの実践」は WHERE であり、OFFSET、LIMIT ではないことがわかりました
コード例、説明方法はありますか?
こんにちは、私はhttp://domasmituzas.files.wordpress.com/2011/09/mysqluc2008-mysql-web.pdfを読ん でいて、「良いページングの実践」は WHERE であり、OFFSET、LIMIT ではないことがわかりました
コード例、説明方法はありますか?
OFFSET を使用せずにページネーションを実装する方法の説明と例を含む、より優れたプレゼンテーションを利用できます。
引用:
OFFSET を大きくすると、アクティブなデータ セットが増加します。MySQL は、呼び出し元に返されることのないデータをメモリに格納する必要があります。
別の解決策は、最後に見た ID を保存することです。次のページhttp://domain.com/forum?page=2&last_seen=100&dir=nextのクエリは次のとおりです。
SELECT ... WHERE id < 100 /* last_seen */ BY id ORDER BY DESC LIMIT $page_size
前のページ: http://domain.com/forum?page=1&last_seen=98&dir=prev :
SELECT ... WHERE id > 98 /* last_seen */ ORDER BY id ASC LIMIT $page_size
私はSQLの第一人者ではありません。しかし、私が知る限り、WHERE
節はその特定の でどの行を選択するかを示していTABLE
ます。これは、LIMIT
句の前に最初に実行されます。
このLIMIT
句は、SELECT
ステートメントによって返される行数を制限します。したがって、この句は句の後に実行され、は よりも高速でWHERE
あると結論付けられます。WHERE
LIMIT
それでも、WHERE
句のPERFORMANCEは、条件をどのように形成するかによって異なります。
ページングに使用するものは次のとおりです。
SELECT *
FROM table T
WHERE T.Id > 100
LIMIT 100;
LIMIT
/を使用する代わりにOFFSET
。
SELECT *
FROM table T
LIMIT 100, 100;
大きなテーブルの利点がはっきりとわかります。