2011-12-11 8 views
9

私が言うidの主キーを持っていると私は"LIMIT 1"を使用するとプライマリキーのクエリが高速化されますか?

SELECT id FROM myTable WHERE id = X 

は、それが1行を見つけて、それが主キーである、またはそれはだろうと探して停止します、などのキーのための単純なクエリを実行した場合LIMIT 1を使ってmysqlに選択を制限する方が良いでしょうか?例えば:

SELECT id FROM myTable WHERE id = X LIMIT 1 
+0

どうすればよろしいですか? –

+1

どうすれば試すことができますか?それは常に1行だけを返します、私はそれが主キーを見つけた後に完全なテーブルスキャンをやめたら知りたいです! – cgweb87

+1

@ cgweb87:あなたの質問に私の編集内容が明確になっていることを確認してください。 –

答えて

7

はい。ここではテーブルスキャンは必要ありません。キーベースのルックアップです。一致する行が見つかり、プロシージャの終了です。

+1

クール感謝.... – cgweb87

+0

"LIMIT 1"を使用するとプライマリキーのクエリが高速化されますか?はい、いいえあなたの答えは「いいえ」と答えていますが、「はい」と答えています。 – TarranJones

+0

@TarranJones:なぜ「いいえ」と思われるのか分かりません。 –

3

このような「最適化」を心配する必要はありません。

一意のインデックス契約ごとに1つの行しかフェッチされず、データベースは非常に高速でになります。すべての(1)行を検索します。これは、索引(または主キー)の背後にある基本的な構造が、高速検索をサポートするため、これを行うことができます。テーブルスキャンは必要ありません。 (一般的にはBツリーの亜種ですが、ハッシュベースのものなどが使用されます)スマートクエリオプティマイザは、一意の制約に基づいて追加のヒントを渡すこともできますが、これについて十分に知っている)

+0

ありがとう、私のデータベースにはユニークなキーを持つ500,000以上の行があり、ちょうどパフォーマンスを少し上げるためにそれを試してみようとしていました。 – cgweb87

+0

@ cgweb87いつでもテストを実行できます。私は "変化はない"と思っていますが、目立った違いが見つかった場合は、1)利益2)フォローアップのSO質問3)利益の向上:) –

+0

@ cgweb87クエリプランを分析し、ウォールクロック時間。 –

関連する問題