【发布时间】:2015-04-29 09:23:50
【问题描述】:
我有一些带有布尔列的表,例如一个活动列来指示用户是否处于活动状态,然后查询我使用的所有非活动用户
select * from users where active = 0
我的大多数用户都很活跃。我明白在没有帮助的情况下,查询需要检查每条记录,这在我的情况下效率低且速度相当慢。我有另一个带有布尔列的表,比如一个已处理的列来记录订单是否已被处理并查询所有未处理的订单,
select * from orders where processed = 0
我正在考虑添加一个帮助表来记录那些不活跃的用户和未处理的订单,例如,
CREATE TABLE IF NOT EXISTS failedRecord (tablename text, row integer) ; //row will be rowid
我真的不喜欢这种自制的解决方案。我更喜欢使用数据库提供的解决方案,但我不确定在布尔列上使用索引是否有帮助。 B/C 我认为索引是通过创建一个单独的索引表来实现的,该索引表将从列创建的键映射到索引表中的行索引。对于布尔列,因为值只能是 0 或 1,我认为映射效率不高。
我使用 sqlite,但我认为其他数据库也会有问题。
更新了我的问题。
我的大多数用户都处于活动状态,并且大部分订单都已处理,即在我的情况下,这里只有几行是 0,所以经过仔细考虑,索引可能是有效的。是这样吗?
【问题讨论】:
-
如果您需要如此密集地访问布尔值,如何将它们全部加载为布尔值,例如一个排序的 ArrayList,在启动时。所以你有一个内存缓存。并且只在必要时更新数据库。
-
我就是这么做的。但我在问任何有效的方法来“加载所有这些”。谢谢
标签: sqlite boolean where-clause query-performance