【发布时间】:2011-07-08 18:22:36
【问题描述】:
我有两种方法可以从数据库中选择一组条目:
SELECT ... WHERE `level` IN (1,2,4,8) LIMIT ...;
或
SELECT ... WHERE `level` & mask LIMIT ...;
总共有 4 个“级别”,编号为 1、2、4、8(因为也可以在其他地方使用相同的面具)。 IN() 或 mask 的大括号可以包含 4 个级别中的任何一个或多个级别。该列已编入索引。查询的时间仍然比舒适的要长,我们正在努力优化它以提高速度。
昨天有人说决定使用幼稚的 IN() 会导致最多四次比较,我应该使用位掩码。今天听说位掩码会完全抵消列索引的优势,而且会慢很多。
你能告诉我哪种方法更快吗?
【问题讨论】:
标签: sql sqlite binary query-optimization mask