やってみる

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

SQLite3構文 indexed by

 使用するインデックスを指定する。ほぼ使わない。

成果物

情報源

構文

テーブル名 indexed by インデックス名
テーブル名 not indexed

 delete, update, select文で使える。

indexed by

create table T(A text);
create index T_A on T(A);
insert into T values('A');
select * from T indexed by T_A where A='A';
A
explain query plan select * from T indexed by T_A where A='A';
QUERY PLAN
`--SEARCH TABLE T USING COVERING INDEX T_A (A=?)

 なぜか以下はError: no query solutionになる。

select * from T indexed by T_A;
Error: no query solution
explain query plan select * from T indexed by T_A;
Error: no query solution
explain query plan select * from T;
QUERY PLAN
`--SCAN TABLE T

not indexed

 インデックスを使わない。

select * from T not indexed where A='A';
A
explain query plan select * from T not indexed where A='A';
QUERY PLAN
`--SCAN TABLE T

所感

 indexed byはSQLite3が間違ったインデックスを使ったときにのみ使うもの。ふつうは使わない。not indexedはインデックスを使わない。そんなことをする意味がないため、やはりふつうは使わない。

対象環境

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

前回まで