有没有办法告诉SQLite内部索引在哪些列?

时间:2016-09-15 08:55:29

标签: sqlite

sqlite> create table foo(x TEXT PRIMARY KEY, y TEXT UNIQUE);
sqlite> select * from sqlite_master;
table|foo|foo|2|CREATE TABLE foo(x TEXT PRIMARY KEY, y TEXT UNIQUE)
index|sqlite_autoindex_foo_1|foo|3|
index|sqlite_autoindex_foo_2|foo|4|

对于用户定义的索引,sqlite_master的最后一列告诉我它们所在的列。但正如您所看到的,对于(非rowid)PRIMARY KEYUNIQUE隐式创建的索引,此信息不存在。有没有可靠的方法告诉我哪个autoindex是哪个?

1 个答案:

答案 0 :(得分:2)

内部和显式创建的索引之间没有区别;您可以使用相同的PRAGMA(index_listindex_infoindex_xinfo)获取有关它们的信息:

sqlite> pragma index_list(foo);
seq         name                    unique      origin      partial
----------  ----------------------  ----------  ----------  ----------
0           sqlite_autoindex_foo_2  1           u           0
1           sqlite_autoindex_foo_1  1           pk          0
sqlite> pragma index_xinfo(sqlite_autoindex_foo_1);
seqno       cid         name        desc        coll        key
----------  ----------  ----------  ----------  ----------  ----------
0           0           x           0           BINARY      1
1           -1                      0           BINARY      0
sqlite> pragma index_xinfo(sqlite_autoindex_foo_2);
seqno       cid         name        desc        coll        key
----------  ----------  ----------  ----------  ----------  ----------
0           1           y           0           BINARY      1
1           -1                      0           BINARY      0