@neilは、SQLitePragmaステートメント PRAGMA INDEX_LIST['table_name']
とを簡単に説明していますPRAGMA INDEX_INFO['index_name']
。ドキュメントによると、これらはSQLiteコマンドとして存在するだけでなく、関数(つまりpragma_index_list(table_name)
、pragma_index_info(index_name)
。
これをよりよく理解するために、次のSQLを見てみましょう。
CREATE TABLE Assets
(
Asset_Id INTEGER NOT NULL,
Longitude REAL NOT NULL,
Latitude REAL NOT NULL,
Name TEXT NOT NULL,
Installation REAL NOT NULL,
Constraint PK_Assets PRIMARY KEY (Asset_Id)
);
CREATE INDEX IX_Assets_Coordinate On Assets (Longitude, Latitude);
CREATE INDEX IX_Assets_Name On Assets (Name);
次のSQLiteセッションは、インデックスをクエリする方法を示しています。
.mode csv
sqlite> PRAGMA index_list('Assets');
seq,name,unique
0,IX_Assets_Name,0
1,IX_Assets_Coordinate,0
sqlite> PRAGMA index_info('IX_Assets_Name');
seqno,cid,name
0,3,Name
sqlite> PRAGMA index_info('IX_Assets_Coordinate');
seqno,cid,name
0,1,Longitude
1,2,Latitude
sqlite>
興味深いのは、コマンドをステートメントのPRAGMA
ように使用できるSELECT
ため、でこれらのコマンドを実行しても問題がないことですC#
。
SQLiteプラグマステートメントには、すべてのテーブルのすべてのインデックス列を列挙するための興味深いサンプルSQLステートメントがあります。
SELECT DISTINCT m.name || '.' || ii.name AS 'indexed-columns'
FROM sqlite_master AS m,
pragma_index_list(m.name) AS il,
pragma_index_info(il.name) AS ii
WHERE m.type = 'table'
ORDER BY 1;