カテゴリー: データベース

[SQLite3] SQLite3でMYSQLのEXPLAIN的なコマンドを使う

インデックスが適切に使われているかをチェックするのに便利なMYSQLコマンド「EXPLAIN」。MYSQLのEXPLAINと同じことをSQLite3でやるにはどうすればいいのか調べてみました。

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

データベースの記事

[Ubuntu] RubyのSequelでMySQLをSQLiteに変換する

開発はMySQL、本番はSQLiteというケースを最近多用しているのですが、変換が面倒だなと思ってネットで調べたら、RubyのGemで変換ができるようでした。Mac用の解説が多かったのですが、UbuntuでもRubyとSQLiteとMySQLが入ってれば普通にできました。

[Ubuntu] RubyのSequelでMySQLをSQLiteに変換する の続きを読む

[CodeIgniter] MySQLからSQLite3へ変換してCodeIgniterで使う

機能的には「おもちゃ」と呼ばれるSQLite3ですが、DBへのリアルタイム書き込みなどがなく、リードオンリーなサイトで、おもちゃレベルのアクセスしかないなら(当ブログのように。。。)、SQLite3で十分じゃないかと思い、CodeIgniter + SQLite3移行してみました。

[CodeIgniter] MySQLからSQLite3へ変換してCodeIgniterで使う の続きを読む

[PHP] phpMyAdminにログインができないと思ったらSSL証明書エラーが原因だった件

前に作業でだけ使ったphpMyAdmin on Dockerを久しぶり立ち上げたらログインができない。おかしい、パスワードもあっているのなぜかと思ったらSSL証明書が原因でした。 目次 1. SSL証明書エラーが起きた状態だとphpMyAd […]

[PHP] phpMyAdminにログインができないと思ったらSSL証明書エラーが原因だった件 の続きを読む

[MYSQL] datetimeカラムのインデックスの使われ方をテストしてみた

MYSQLで、datetimeカラムの検索をする際に、インデックスが使われていないことがあったので、datetimeカラムのインデックスがどのように使われているのかをテストしてみました。

[MYSQL] datetimeカラムのインデックスの使われ方をテストしてみた の続きを読む

[PHP & MySQL] 検索と詳細取得を分離&INDEXチューニングで爆速にスピードアップした

とあるECサイト案件で検索画面が異常に遅くなっていたので、検索と詳細の取得を分離、インデックスのチューニングをして高速化してみました。

[PHP & MySQL] 検索と詳細取得を分離&INDEXチューニングで爆速にスピードアップした の続きを読む

[VPS] ConoHaデータベースサーバーの速度をベンチマークする

ConoHaのDBサーバーがキャンペーンで60日間無料だったので、受託している仕事のサーバーを移転するか検討するために、DBサーバーの速度を測るために、お手製ベンチマークを取ってみました。

[VPS] ConoHaデータベースサーバーの速度をベンチマークする の続きを読む