一時テーブルやインデックスをメモリに保存する等。
成果物
情報源
temp
保存先をインメモリにしたい
PRAGMA temp_store=2;
これが必要。これがないときはファイル保存される。以下、しくみ。
SQLITE_TEMP_STORE
コンパイルオプションのひとつ。
SQLITE_TEMP_STORE |
意味 |
---|---|
0 |
常に一時ファイルを使用する |
1 |
デフォルトでファイルを使用するが、PRAGMA temp_store によるオーバーライドを許可する |
2 |
デフォルトでメモリを使用するが、PRAGMA temp_store によるオーバーライドを許可する |
3 |
常にメモリを使用する |
デフォルトは1
。詳細。
PRAGMA temp_store
SQLITE_TEMP_STORE
が1
,2
のいずれかのときのみ有効。
PRAGMA temp_store |
保存先(temp 表, index) |
---|---|
0 |
SQLITE_TEMP_STORE に従う |
1 |
ファイル |
2 |
メモリ |
PRAGMA temp_store_directory = 'ディレクトリ名'
保存パスを設定する。sqlite3_temp_directory
でも可。非推奨らしい。
全パターン
SQLITE_TEMP_STORE |
PRAGMA temp_store |
保存先(temp 表, index) |
---|---|---|
0 | * | ファイル |
1 | 0 | ファイル |
1 | 1 | ファイル |
1 | 2 | メモリ |
2 | 0 | メモリ |
2 | 1 | ファイル |
2 | 2 | メモリ |
3 | * | メモリ |
3.29.0のSQLITE_TEMP_STORE
値を調べた
grep SQLITE_TEMP_STORE ./*
./Makefile.msc:# SQLITE_TEMP_STORE is 0 to force temporary tables to be in a file, 1 to ./Makefile.msc:TCC = $(TCC) -DSQLITE_TEMP_STORE=1 ./Makefile.msc:RCC = $(RCC) -DSQLITE_TEMP_STORE=1 ./sqlite3.c:#ifdef SQLITE_TEMP_STORE ./sqlite3.c: "TEMP_STORE=" CTIMEOPT_VAL(SQLITE_TEMP_STORE), ./sqlite3.c:** Provide a default value for SQLITE_TEMP_STORE in case it is not specified ./sqlite3.c:#ifndef SQLITE_TEMP_STORE ./sqlite3.c:# define SQLITE_TEMP_STORE 1 ./sqlite3.c:** SQLITE_TEMP_STORE is set to 3 (never use temporary files), set it ./sqlite3.c:#if SQLITE_TEMP_STORE==3 || SQLITE_THREADSAFE==0 ./sqlite3.c:** as needing reloading. This must be done when using the SQLITE_TEMP_STORE ./sqlite3.c: if( SQLITE_TEMP_STORE==0 ./sqlite3.c: || (SQLITE_TEMP_STORE==1 && db->temp_store<=1) ./sqlite3.c: || (SQLITE_TEMP_STORE==2 && db->temp_store==1) ./sqlite3.c:** parameter) and the compile time value of SQLITE_TEMP_STORE. The ./sqlite3.c:** SQLITE_TEMP_STORE db->temp_store Location of temporary database ./sqlite3.c:#if SQLITE_TEMP_STORE==1 ./sqlite3.c:#if SQLITE_TEMP_STORE==2 ./sqlite3.c:#if SQLITE_TEMP_STORE==3 ./sqlite3.c:#if SQLITE_TEMP_STORE<1 || SQLITE_TEMP_STORE>3 grep: ./tea: ディレクトリです
-DSQLITE_TEMP_STORE=1
や# define SQLITE_TEMP_STORE 1
からみて1
であると思われる。
つまり、temp
保存先をインメモリにしたいときは以下。
PRAGMA temp_store=2;
これがないときはファイル保存される。もうこれは~/.sqliterc
に設定してもいいレベルか。
~/.sqliterc
~/.sqliterc
PRAGMA temp_store=2;
~/.sqliterc
ファイルにて、起動時にTEMP保存先をインメモリに指定する。
-- Loading resources from /home/*/.sqliterc
の表示がウザいときは以下。
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- bash 4.4.12(1)-release
- SQLite 3.29.0
- MeCab 0.996ユーザ辞書
$ uname -a Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux
前回まで
- SQLite3学習 俯瞰まとめ
- SQLite3学習 環境構築まとめ
- SQLite3学習 インタフェースまとめ(C言語、CLI、対話モード、Tcl...)
- SQLite3学習 ドットコマンドまとめ
- SQLite3学習 JSON拡張まとめ
- SQLite3学習 FTSまとめ(ICU, MeCab)
- SQLite3学習 再帰クエリ(WITH RECURSIVE)
- SQLite3学習 R-Treeモジュール
- SQLite3学習 Geopoly(2次元ベクタ画像の生成)
- SQLite3学習 拡張関数(generate_series)
- SQLite3学習 拡張ライブラリ数学関数(extension-functions.c)
- SQLite3学習 謎と名前
- SQL文の分類(DDL,DML,TCL,DCL)
- SQL構文 alter(rename)
- SQL構文 alter(add column)概要
- SQL構文 alter(add column)制約
- SQL構文 alter(add column)sqlite_master変更しても反映されない
- SQL構文 alter(add column)スキーマ再定義(テーブル再作成による定義変更)
- SQL構文 analyze
- SQL構文 attach/detach
- SQLite3構文 begin,end,commit,rollback,savepoint(deferred,immediate,exclusive)
- SQLite3構文 コメント
- SQLite3構文 create/drop
- SQLite3構文 index(create/drop)
- SQLite3構文 table(create/drop)
- SQLite3構文 列制約(default)
- SQLite3構文 列制約(collate)
- SQLite3構文 列制約(primary key)
- SQLite3構文 列制約(primary key)ベストプラクティス
- SQLite3構文 列制約(unique)
- SQLite3構文 列制約(not null)
- SQLite3構文 列制約(check)
- SQLite3構文 列制約(foreign key references)
- SQLite3構文 表制約(primary key, unique, check, foreign key)
- SQLite3でメタデータを取得する方法(DB名(スキーマ名)、テーブル名、列名、制約)