mysql IN FIND_IN_SETコントラスト

989 ワード

FILE_IN_SET IN使用方法の比較
userテーブルデータ
id
name
1
明ちゃん
2
赤ちゃん
3
李さん
クエリーidが1,3のデータ
select * from `user` where id in(1,3)
select * from `user` where FIND_IN_SET(id, '1,3')

実行状況のクエリーにexplainコマンドを使用する
  • INコマンド結果
  • explain
    select * from `user` where id in(1,3)

    id
    select_type
    table
    type
    possible_keys
    key
    key_len
    ref
    rows
    Extra
    id
    SIMPLE
    user
    range
    PRIMARY
    PRIMARY
    4
    2
    Using where
    type=rangeインデックス範囲スキャン
  • FIND_IN_SET結果
  • explain
    select * from `user` where FIND_IN_SET(id, '1,3')

    id
    select_type
    table
    type
    possible_keys
    key
    key_len
    ref
    rows
    Extra
    id
    SIMPLE
    user
    ALL
    3
    Using where
    type=ALLは全体的にスキャン効率が悪いのでおすすめしません
    結論
    IN高効率とFIND_IN_SET