@neil 简要提到了SQLite Pragma 语句 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 Pragma 语句中,他们有一个有趣的示例 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;