sqlite - 使用 SQLite 如何索引 CREATE TABLE 语句中的列?

标签 sqlite

如何在我的 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();

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

最佳答案

您不能完全按照您的要求进行操作,但与某些 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 树;您无法选择类型是什么或列的哪一部分被索引;整个索引列都在索引中。它对于范围查询仍然很有效,只是占用的磁盘空间可能比您真正想要的多一点。

关于sqlite - 使用 SQLite 如何索引 CREATE TABLE 语句中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1676448/

相关文章:

android - 将 yyyymm 传递给 yyyy-mm-dd 格式的字符串时如何从 sqlite 中检索值?

ruby-on-rails - #<PG::Result:0x007fcc82900a78> 的未定义方法 `empty?'

java - SQLiteDatabase android 中的特殊字符

php - 无法在 ubuntu 上安装 sqlite

c# - Sqlite 数据库和数据网格

java - SQL(查询)错误或缺少数据库,即使在创建数据库和表后也是如此

python - 重击 : sqlite3: command not found

sqlite - SQLite Xamarin : Query

android - SQLite 创建双列 _id

android - 将我自己的 SQLite 数据库从 Asset 文件夹复制到