[SQLite3] SQLite3でMYSQLのEXPLAIN的なコマンドを使う
インデックスが適切に使われているかをチェックするのに便利なMYSQLコマンド「EXPLAIN」。MYSQLのEXPLAINと同じことをSQLite3でやるにはどうすればいいのか調べてみました。
更新日: 2018.7.17公開日: 2017.10.10
SQLite3では「EXPLAIN QUERY PLAN」がEXPLAINと同じ
MYSQLで言うEXPLAINは「EXPLAIN QUERY PLAN」というコマンドを使います。
SQLite3公式サイトよると、表示されるステータスは以下になる模様。
フルスキャン
EXPLAIN QUERY PLAN SELECT col_a, col_b FROM table_1 WHERE col_a=1;
0|0|0|SCAN TABLE table_1
インデックスを使った場合
※col_aにidx_1というインデックスを張った場合
EXPLAIN QUERY PLAN SELECT col_a, col_b FROM table_1 WHERE col_a=1;
0|0|0|SCAN TABLE USING INDEX idx_1
複数インデックスを使った場合
※col_a,col_bにidx_2というインデックスを、col_bにidx_3というインデックスを、張った場合
EXPLAIN QUERY PLAN SELECT * FROM table_1 WHERE col_a=1 OR col_b=2;
0|0|0|SEARCH TABLE table_1 USING COVERING INDEX idx_2 (col_a=?)
0|0|0|SEARCH TABLE table_1 USING INDEX idx_3 (col_b=?)
結果の見え方が見づらいんですが、一応インデックスを使っているかは確認できますね。
データベースを高速化するには、インデックスを適切に設定しそれをうまく使うのが重要なので、SQLite3でもしっかりと「EXPLAIN QUERY PLAN」を使いながら、クエリを最適化していきたいですね。
SQLite3にはMYSQLのスロークエリログみたいなものがないですしね。