WHERE email = ? での検索が遅い。最初に検討すべき対策は?
正答
- email 列にインデックスを作る
- SELECT * を列名の指定に変える
- LIMIT 1 を付ける
- 表を 2 つに分割する
解説
インデックスが無い列を WHERE で検索すると、表の全行を順に調べる全表走査になり、行数に比例して遅くなる。email 列にインデックスを作れば目的の行を直接探せるようになり、検索は大きく速くなる。SELECT の列を絞ることや LIMIT は転送量を減らす効果はあるが、該当行を探す時間はほぼ変わらない。表の分割は設計変更で影響が大きく、最初に取る手ではない。インデックスは書き込み時の更新コストが増える点は把握しておく。
参考: www.sqlite.org
この問題を含む SQL のテストを制限時間つきで解く
SQLクイズへ