制限構文を使用するためにクエリのパフォーマンスがどのように影響を受けるかを知りたい 180000行があります。ですから、私は限界構文を使ってデータを選択します。 は、だから私は限界の構文とクエリのパフォーマンスとの関係を知りたい よろしくQuery performaceを使用したMySQLの制限構文
答えて
LIMIT
通常、要求元のクライアントにMySQLサーバから大きな結果セットを送信するコストの一部が保存されます。クライアント側で不必要な行を単にスキップするのではなく、結果セットの行がほんの少し必要な場合は、LIMIT
を使用するとよいでしょう。
LIMIT
を使用すると、反反響パターンが有名ですが、です。このようなクエリは、MySQLのサーバーリソース(時間とRAM)でこのような
SELECT a,whole,mess,of,columns,...
FROM big_table JOIN big_tableb ON something JOIN big_tablec ON something ....
ORDER BY whole, mess DESC
LIMIT 5
です。どうして?大きな結果セットを生成してからソートし、いくつかの行を除くすべてを破棄します。
もう1つパフォーマンス反パターンは、複合結果セットに適用されます。LIMIT small_number, big_number
です。少数の行を得るためには、多くの行を突き抜けなければなりません。
あなたは延期パターン、このようなものに参加してこれらを回避することができます。
SELECT a,whole,mess,of,columns,..
FROM (
SELECT big_table_id
FROM big_table JOIN big_tableb ON something JOIN big_tablec ON something ....
ORDER BY whole, mess DESC
LIMIT 5, 200000
) ids,
JOIN big_table ON ids.big_table_id = big_table.big_table_id
JOIN big_tableb ON something JOIN big_tablec ON something ...
このパターンの注文をしてからちょうどいくつかのid
値ではなく、列の全体の混乱を捨てます。
LIMIT
を使用すると、実際にを使用すると、結果セットがインデックスで注文される状況では、パフォーマンスが向上します()。たとえば、あなたがdatestamp
のインデックスを持っていて、MySQLの問い合わせプランナが
SELECT datestamp, col, col
FROM table
ORDER BY datestamp DESC
LIMIT 20
datestamp
インデックスを逆方向にスキャンし、ちょうど20行を取得することができない場合。
(これは 'LIMIT offset、limit'ですので、あなたのコメントの一部は後方にあります) –
素早く任意のSQLコマンドの影響を測るための最も簡単な方法は、EXPLAIN
を使用して、クエリをINGのことは通常は良いルートであるEXPLAIN
を皮切り...などの行数をチェックしています。照会の前に「EXPLAIN」を入れて、どれだけ高価であるか調べてください。
は問題ではないかもしれません、大規模なデータセットを送信する - それはの私の経験でソート
を、それは非常に遅いORDER BY
の使い方です。頻繁にLIMIT
とORDER BY
が明白な理由で一緒に使用されています。それはLIMIT
ではなく、遅い部分であるソートです。
LIMIT
は、破棄される可能性のある大きなデータセットを返さないようにしますが、通常は実際には同じローカルネットワーク上にあるか、同じサーバーにさえなります。ネットワークパフォーマンス&大きなデータセットは通常、制限要因ではありません。代わりに、それを返す前にデータをソートするコストが最も高くなります。これらのソートを最適化することで、たとえばクエリに一致するインデックスを作成するなど、最大の利点を得ることができます。
' EXPLAIN'は通常 'LIMIT'を無視します。それで、ここで助けてください。 –
- 1. mysqlの構文制限のエラー-1,1
- 2. case文を使用した更新でMySql Query構文エラーが発生しました
- 3. NPM 'mysql'モジュールを使用したMySQL構文エラー
- 4. ページングを使用したLaravel制限レコード
- 5. sqlとmysqlの制限構文の違い
- 6. GoogleクラウドBig query UDF制限
- 7. MySQLを使用したクエリの構文エラーの取得
- 8. キュークリアを使用したRxJSの無制限レート制限
- 9. mysqlを使用して単語を制限する方法
- 10. strlenを使用した文字の制限
- 11. MySQLの制限
- 12. XSD構文の制限とデフォルト値
- 13. PHP/MySQLの制限文字が
- 14. サブクエリの制限を使用
- 15. 実際の制限なしでMySQLのLIMITを使用する
- 16. logrotateを使用した無制限ログ
- 17. Javascriptを使用した年齢制限
- 18. 制限なしのMySQL int()
- 19. 外部キーを使用したMySQL INSERTの構文
- 20. PHP構文:||を使用したプログラムフロー制御オペレータ
- 21. Neo4J REST APIのcypher-query MERGE構文を使用する
- 22. MySQLの外部キー制約構文
- 23. MySQLのダンプ制限? MySQL全体のデータベースサイズの制限?
- 24. 制限のMySQLリレーショナルテーブル
- 25. "Flexible" MySQLの制限
- 26. mysqlワークベンチレコードの制限
- 27. Mysqlフルテキストインデックスの制限?
- 28. 制限付きGADTレコードでレコードの更新構文を使用する
- 29. PHPを使用してMYSQL内で無制限のネストされたカテゴリ
- 30. INNER JOINとSqlDataSource with MySQLを使用した構文エラー
私が知らない最近の改良点がない場合、これらの2つの間には関係がありません。 – GhostGambler
LIMITはクエリの実行を遅くすることがあります。20000000レコードを取得する必要があるため、LIMIT 10000000,10000000などの大きなオフセットを使用する場合。また、MySQLはクエリを実行するために一時テーブルを使用する必要があります。 –
@RaymondNijland LIMITを使用しないと、すべてのデータが受信されます。すべてのデータは、通信チャネルを介して送信しなければなりません。クエリで使用できるposition-columnを持つ場合と比較して遅くなりますが、これはすべての場合で可能ではありません。 – GhostGambler