c0d3man52

データベース

[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のスロークエリログみたいなものがないですしね。