やってみる

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

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

 潜在的スキーマの問題を報告する。

成果物

.help

.lint OPTIONS            Report potential schema issues.

.lint

.lint
Usage lint sub-command ?switches...?
Where sub-commands are:
    fkey-indexes

使ってみる

sqlite3 :memory: \
"PRAGMA foreign_keys = ON;" \
"create table classes(id integer primary key, name text);" \
"create index idx_classes_id on classes(id);" \
"create table users(id integer primary key, name text, class_id integer, foreign key(class_id) references classes(id));" \
"insert into classes(name) values('ひまわり組');" \
"insert into classes(name) values('チューリップ組');" \
"insert into users(name, class_id) values('Yamada', 1);" \
"insert into users(name, class_id) values('Suzuki', 2);" \
".lint fkey-indexes"
CREATE INDEX 'users_class_id' ON 'users'('class_id'); --> classes(id)

 ん? つまり外部キーになっている列は両テーブルともインデックス作れってこと?

sqlite3 :memory: \
"PRAGMA foreign_keys = ON;" \
"create table classes(id integer primary key, name text);" \
"create index idx_classes_id on classes(id);" \
"create table users(id integer primary key, name text, class_id integer, foreign key(class_id) references classes(id));" \
"create index idx_users_class_id on users(class_id);" \
"insert into classes(name) values('ひまわり組');" \
"insert into classes(name) values('チューリップ組');" \
"insert into users(name, class_id) values('Yamada', 1);" \
"insert into users(name, class_id) values('Suzuki', 2);" \
".lint fkey-indexes"



 お、何も表示されなくなった。

 たぶん「外部キーとなる列にはインデックスを貼らないと遅くなる」という潜在的スキーマの問題を報告してくれたのだろう。知らんけど。

 これ、SQL読めて空気も読めないと解読できないのでは?

対象環境

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

前回まで