やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

SQLite3ドットコマンド(.eqp)

 クエリプラン機能の有効化。

成果物

.help

.eqp on|off|full|...     Enable or disable automatic EXPLAIN QUERY PLAN

 SQL文の実行計画を見る。効率のよいSQL文を模索するのに使うらしい。

.eqp

インデックスなし

echo "create table users(id primary key, name text, class text);
insert into users(name, class) values('Yamada','A');
insert into users(name, class) values('Suzuki','B');
insert into users(name, class) values('Tanaka','A');
" > create_0.sql
sqlite3 :memory: \
".read create_0.sql" \
".eqp on" \
"EXPLAIN QUERY PLAN select * from users where class='A';"
QUERY PLAN
`--SCAN TABLE users

インデックスあり

echo "create table users(id primary key, name text, class text);
insert into users(name, class) values('Yamada','A');
insert into users(name, class) values('Suzuki','B');
insert into users(name, class) values('Tanaka','A');
create index i1 on users(class);
" > create_1.sql
sqlite3 :memory: \
".read create_1.sql" \
".eqp on" \
"EXPLAIN QUERY PLAN select * from users where class='A';"
QUERY PLAN
`--SEARCH TABLE users USING INDEX i1 (class=?)

 表示がすこし変わった。

 たぶん普通は主キーをインデックスにするのだろうが。

 クエリプランの読み方も勉強すべき。だがそれは後回し。そもそも基本構文すら未学習だし。

.eqp on

 EXPLAIN QUERY PLANを付与せずとも、ステートメント実行前にクエリプランを出力する。

select 1;
QUERY PLAN
`--SCAN CONSTANT ROW
1

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux

前回まで