如何在CREATE TABLE语句中索引列?该表看起来像
command.CommandText =
"CREATE TABLE if not exists file_hash_list( " +
"id INTEGER PRIMARY KEY, " +
"hash BLOB NOT NULL, " +
"filesize INTEGER NOT NULL);";
command.ExecuteNonQuery();
我希望filesize是索引,并希望它是4个字节
答案 0 :(得分:116)
你无法准确地完成你所要求的,但与一些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树;你无法选择类型是什么或列的哪个部分被索引;整个索引列都在索引中。它对于范围查询仍然有效,它可能会占用比您真正喜欢的更多的磁盘空间。
答案 1 :(得分:5)
我认为你不能。你为什么不能使用第二个查询?在SQLite中指定索引的大小似乎是不可能的。但话说回来,它是SQ_Lite_;)
create index
myIndex
on
myTable (myColumn)