我们在移动设备中存储了大量的十六进制数据(例如:“2D2134F2487B0ACE08B7”),大约有600.000到900.000个条目。
对此的查询非常缓慢......
select id from 'combinations' where token = '2D2134F2487B0ACE08B7' limit 1
将令牌存储为二进制数是否有意义,以便索引比字符串比较快得多?
问题还在于 - 是否可以在sqlite中存储这么大的二进制数?
f.e.
hex: 2D2134F2487B0ACE08B7
=> "00101101001000010011010011110010010010000111101100001010110011100000100010110111"
我无法找到任何我理解的......:/ 谢谢!
编辑: LOLOL ......我不知道为什么我之前没有意识到...我还可以将十六进制转换为普通整数,这样可以节省很多密钥长度。但无论如何..如果我能在int中保存像“213119049475094085503159”这样的大值,问题仍然存在吗?
答案 0 :(得分:3)
SQLite的整数不能超过64位。
如果对token
编制索引,则查找速度很快。
为节省空间,您可以将值存储为blob:
select id from combinations where token = x'2D2134F2487B0ACE08B7'
(SQLite索引支持所有数据类型。)
答案 1 :(得分:1)
SQLite可以存储的内容NUMBER
定义为here
该值是有符号整数,存储为1,2,3,4,6或8个字节,具体取决于值的大小。
表示相当于long
的值。十六进制长度是
0102030405060708
这还不够
2D2134F2487B0ACE08B7
所以答案是:不,你不能把它存储为数字。
如果您还没有这样做,请考虑将该列编入索引,因为这会加快您正在进行的查询。请参阅https://www.sqlite.org/queryplanner.html以获得相当不错的解释。