主キー/一意のフィールドでクエリを実行するときにMySQLの「LIMIT1」を使用する意味はありますか?
LIMIT 1
を使用することはお勧めできません 主キーまたは一意性制約のいずれかに反するフィルター基準を使用してクエリを実行する場合。主キーまたは一意性制約は、その値を持つテーブルに1つの行/レコードのみが存在することを意味します。1つの行/レコードのみが返されます。 LIMIT 1
を持つことは矛盾しています 主キー/一意のフィールドで-後でコードを保守している人が重要性を誤解し、コードを推測する可能性があります。
しかし、最終的な指標は説明計画です:
explain SELECT t.name FROM USERS t WHERE t.userid = 4
...戻り値:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
-----------------------------------------------------------------------------------------------------
1 | SIMPLE | users | const | PRIMARY | PRIMARY | 4 | const | 1 |
...そして:
explain SELECT t.name FROM USERS t WHERE t.userid = 4 LIMIT 1
...戻り値:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
-----------------------------------------------------------------------------------------------------
1 | SIMPLE | users | const | PRIMARY | PRIMARY | 4 | const | 1 |
結論
違いはありません、必要ありません。この場合は最適化されているようです(主キーに対してのみ検索します)。
インデックス付きフィールドはどうですか?
インデックス付きフィールドは、フィルタリングされる値の一意性を保証するものではなく、複数回発生する可能性があります。したがって、LIMIT 1
1行を返したいと仮定すると、理にかなっています。