我有一个包含键和值列的简单表“tags”。键始终是一个字符串,值可以是string,int64或double值。
此时我没有任何实际数据可供测试。但我很好奇值列的索引用法。我已经将列定义为TEXT类型 - 当int64或double类型绑定到语句时,SQLite仍然能够使用值列上的索引吗?
这是测试表:
CREATE TABLE "tags" ("key" TEXT,"value" TEXT DEFAULT (null) );
INSERT INTO "tags" VALUES('test','test');
INSERT INTO "tags" VALUES('testint','1');
INSERT INTO "tags" VALUES('testdouble','2.0');
通过以下方式分析查询时,我看到了其他“整数”和“亲和”条目:
explain SELECT value FROM tags where key = "testint" and value >= 1
但我没有看到索引使用方面的任何差异(例如,总是使用idxgt)。但我宁愿有一个明确的答案,而不是依赖于小测试数据的错误假设。
答案 0 :(得分:1)
具有TEXT亲缘关系的列使用存储类NULL,TEXT或BLOB存储所有数据。如果将数字数据插入到具有TEXT亲和力的列中,则在存储之前将其转换为文本形式。
所有类型的排序顺序均为well-defined。 强制亲和力为TEXT使得对该列的数字进行比较的行为就像值是文本一样,但这可能就是你想要的。
在任何情况下,索引都不会改变行为;它们适用于所有类型,并以与非索引列完全相同的方式应用亲和力。