sql >> データベース >  >> RDS >> Mysql

インデックス付き/一意のフィールドでクエリを実行するときにMySQLLIMIT1を使用する意味はありますか?

    主キー/一意のフィールドでクエリを実行するときに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行を返したいと仮定すると、理にかなっています。



    1. Oracle:SQLサーバー用のプロファイラーのようなクエリをトレースするツールはありますか?

    2. MySQLレプリケーションを使用したライブマイグレーション

    3. MS SQL Server ManagementStudioを使用せずにSQLServerのデフォルトデータベースを変更するにはどうすればよいですか?

    4. 初心者向けSQLLessThan()演算子