- ベストアンサー
MySQLのLIMIT 1指定について
- MySQLのLIMIT 1指定についてのメリットとデメリットについて説明します。
- SQL文にLIMIT 1をつけることのメリットとデメリットについて解説します。
- LIMIT 1の有無がメモリ使用量や検索速度に与える影響について詳しく説明します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 ははぁ・・・なるほど。 以前の質問から順番に読んで、ご質問の意図がわかりました。 LIMIT句を付けた場合のオプティマイザの挙動については、公式ドキュメントを見る事が良い方法です。 MySQLがどのようにクエリーを解釈して実行するかが書かれています。 ご質問にあるメリットは、まさにコレです。 >常に少しでも最適、さらに最適な方法がないかを追求していくのが、 >面白い仕事のやり方だとも考えます。 同感ですね。 まぁ、追求できない(させてくれない)現場も多々ありますが・・・。
その他の回答 (1)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
SELECT TOP 1 * FROM food WHERE food_id=1 ORDER BY entry_date DESC; SELECT * FROM food WHERE food_ID=1 AND Entry_date=(Select Max(Entry_date) FROM food WHERE food_ID=1); この2つのSQL文は同一の結果を返します。で、その実行速度ですが、当然に前者が速いと推測されます。 Option Compare Database Option Explicit Private Sub コマンド2_Click() Dim I As Integer Dim S As Single Dim E As Single Dim R As String Dim Q As String Q = "SELECT TOP 1 * FROM food WHERE food_id = 1 ORDER BY entry_date DESC;" S = Timer For I = 1 To 10000 R = DBSelect(Q) Next I E = Timer Debug.Print R Debug.Print "E-S=" & E - S End Sub 推測が当を得ているのかどうかは、上記のテストで証明できます。テストでは、添付図のように1万分の7.6秒ほどLIMIT句を用いた方が速いという結果が出ています。 PS、プログラミングにおいて速度や、メモリ使用量云々の考察する時代は過ぎ去った。 Javaプログラミング科に入学してMySQLのコマンドラインツールやCDレンタルシステムを作成した際の講師の話。 >プログラミングにおいて速度や、メモリ使用量云々の考察する時代は過ぎ去った。 >安直に簡単に書くのが一番。 私も、同感です。私が、最初にプログラミングしたPCのメインメモリは僅かに12K。とにかく、速度や、メモリ使用量を気にしたもんです。でも、今は、PCの性能は雲泥の差。仮に差があっても1万分の1秒の世界。「安直に簡単に!」が一番ですよ。
お礼
ご回答ありあがとうございます。 速度やメモリに差が無い様なら、何千人が朝、一度にアクセスしてきても、 うちの会社のサーバーも負荷がかわらない。 あまり細かいことをきにせず、 見やすいSQL文(=バグの少ない&メンテナンス性の良い)を書くのがよさそうですね。
補足
と思いましたが、 常に少しでも最適、さらに最適な方法がないかを追求していくのが、 面白い仕事のやり方だとも考えます。 特に、他の処理も当然うごくので、そこで微々たるものでも、 積もり積もって、何千人分もの処理をするとなることを考えると...
お礼
ご回答ありがとうございます。 SQLは、同じ目的を達成することに対して、 書き方が人それぞれで、あっ、これは、簡単だし、早そう!!というのから、 in とか使ったり、サブクエリーを使ったりして、 難しそうだけど、早いのかな? かっこよい理想的な書き方なのかな? など、考察や実際にプログラムに埋め込んでいる日々です。 こんな書き方をすると、回答者の皆様に失礼ですが、 SQL文のコンテストみたいなものです。 いかにすばらしいSQL文を提示してくれる方があわられるかを 楽しみにしています。 私のプログラムは、勝手にですが、きれいに、スマートに、簡潔に、早く、読みやすく、バグをださない、出してもすぐに原因を追究でき復旧がはやい、を当たり前のことですが、それで行きたいと、 仕事=プロなので、当たり前のことですが、こだわっています。
補足
結局なにをしたいかといいますと、 当社も、「顧客第一主義」ですので、ユーザー様によりよりもののご提供、万が一の時の復旧の速度、などを考慮したものを、ご提供したいと考えて、ご質問させていただいております。 ですので、時々、バカみたいなSQLの質問で、馬鹿にされたり、けなされたり、もう質問するな!!、と言われ、気にはなりますが、お客様の為にとおもい。 みなさまのご回答のお手数をお借りしている次第です。