mysql に関する質問です。version 5.0.77 です。select hoge.* from hoge と検索した場合、limit の指定がないと、行数の大きいデータの場合に、メモリを非常に喰うのでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2010/11/19 18:30:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:windofjuly No.1

回答回数2625ベストアンサー獲得回数1149

ポイント35pt

【1】メモリを喰い過ぎてパンクしたりはしません

メモリの利用量はあらかじめ決められていますので「非常に喰う」という状況にはなりません

もちろん、メモリ関係のセッティングを勝手に調整して、しかも調整に失敗している場合は除きます

http://dev.mysql.com/doc/refman/5.1/ja/memory-use.html

 

【2】行数が多いとハードディスクからの読み込みが負担になります

行数が多いと、クエリキャッシュなどが力を発揮できず(すぐに満タンとなってしまい、古いものから順に削除されてしまうため、メモリ上にデータを残して置けなくなり、毎回毎回ハードディスクからデータを取ってくるようになってしまうため)システム全体のパフォーマンスはすこぶる悪くなるかもしれません

 

データベースを利用する場合には「少ないアクセスで最大の効果をあげるように工夫する必要があります」ので「クエリ実行結果が出来る限りコンパクトになるようにlimitなどを意識して使う」ようにしましょう(MySQLに限らず他のデータベースでも同様です)

id:asuka645 No.2

回答回数856ベストアンサー獲得回数97

ポイント35pt

MySQLサーバが動いている環境や、DB構成がInnnoDBかMyISAMかによって変わってきます。


たとえばWindows上でInnnoDBの場合、LIMIT句がないとバッファプールに使われる可能性はあります。

さらにWindows版のInnoDBの場合、ファイルシステムのキャッシュを使わないので、メモリがかなり浪費される可能性があります。


参考「InnoDB Startup Options and System Variables

id:k-tan2 No.3

回答回数401ベストアンサー獲得回数48

ポイント10pt

>行数の大きいデータの場合に、メモリを非常に喰うのでしょうか?

どのくらいの件数を言ってるか不明ですが、10万件とかその程度なら問題ないレベルです。

LMITは、データが1000件あるときに、

WEBとかでよくあるように、1-10、11-20,21-30とかのように

部分を取得したいときに使うと便利なだけです。

LMITをつけても、検索条件に該当するレコードを取得して、そこから間引くだけなので

メモリー消費量が特にへるわけでもないんでもないです。

そもそもLMITを使うことで、メモリー消費量を抑えようとかそういう考えの人はいないと

思いますけど。実際に、メモリーの消費量が抑えられるとしても。

http://q.hatena.ne.jp/answer

  • id:windofjuly
    うぃんど 2010/11/13 10:01:01
    (1)Windows上でInnnoDBの場合、LIMIT句がないとバッファプールに使われる可能性はあります。
    LIMITの有無でバッファプール利用の有無が決まったりはしません
     
    (2)Windows版のInnoDBの場合、ファイルシステムのキャッシュを使わないので、メモリがかなり浪費される可能性があります。
    Windowsでは「ファイルシステムのキャッシュを使わないのでダブルキャッシュという無駄はそもそも発生しません」という但し書きですね
     
    参考リンク先を探すところまでは優秀だと思いますが、そこに書かれていることを捻じ曲げて理解してしまっては元も子もありません。残念ですね

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません