使用 SQLite 如何索引 CREATETABLE 语句中的列?

如何在 CREATETABLE 语句中索引一个列

command.CommandText =
"CREATE TABLE if not exists file_hash_list( " +
"id    INTEGER PRIMARY KEY, " +
"hash  BLOB NOT NULL, " +
"filesize INTEGER NOT NULL);";
command.ExecuteNonQuery();

我希望文件大小是索引,并希望它是4字节

74664 次浏览

我觉得你做不到。为什么不能用第二个问题呢?在 SQLite 中似乎不可能指定索引的大小。不过话说回来,它是 SQ _ Lite _;)

create index
myIndex
on
myTable (myColumn)

您不能精确地执行所要求的操作,但是与某些 RDBMS 不同,SQLite 能够在事务内执行 DDL,并得到适当的结果。这意味着,如果您真的担心没有索引就不会看到 file _ hash _ list,那么您可以这样做

BEGIN;
CREATE TABLE file_hash_list (
id INTEGER PRIMARY KEY,
hash BLOB NOT NULL,
filesize INTEGER NOT NULL
);
CREATE INDEX file_hash_list_filesize_idx ON file_hash_list (filesize);
COMMIT;

或者使用您在那里得到的任何数据库库的事务原语的等价物。

但是,与只在事务外执行两个命令相比,我不确定 有需要实际上是怎样的。

正如其他人指出的那样,SQLite 的索引都是 B 树; 您无法选择索引的类型或列的哪个部分; 整个索引列都在索引中。对于范围查询,它仍然是有效的,只是它可能会占用比您真正希望的多一点的磁盘空间。