2016-06-13 12 views
1

はPythonコードのサンプルである:この例ではのMySQL、fetchoneここでLIMIT

query = "SELECT * FROM users WHERE id = 17" 
cursor.execute(query) 
row = cursor.fetchone() 

、クエリが最も単一の行に戻ることを意味します。しかし、時々私は、例えば、同じコードで複数行の結果から単一の行を取得したい:

パフォーマンスの用語で
query = "SELECT * FROM users WHERE name LIKE 'foo%'" 
cursor.execute(query) 
row = cursor.fetchone() 

、それが明示的LIMIT 1を書くために良いですか?

+1

はい、なぜ1つだけ必要なので、もっとフェッチしますか? –

+0

@ juergen d - LIMITはSELECTの後に動作します –

答えて

0

いいえ、LIMIT句は、結果セットのSELECTの後に実行されます。 id = 17の行がたくさんある場合は、LIMITを使用しない場合は、サーバーからクライアントに転送する必要があります。

+0

_Not true_;少なくとも必ずしも真実ではない。 2番目の例では、 'INDEX(name)'と仮定すると、テーブルの正確に1つのプローブが実行されます。 _one_ foo行を取得します(またはそこには何も見つかりません)。 'GROUP BY'や' ORDER BY'がある場合、 'SELECT'は' LIMIT'を適用する前に結果セット全体を集める必要があります。 –

+0

質問のグループ/注文はどこですか? –

+0

'GROUP' /' ORDER'がないので、 'LIMIT'_will_は' SELECT'を短絡します。 (他にも例外があります)あなたの答えは、私が読んだように、 'LIMIT'は決して' SELECT'を短絡していないと言います。 –