在SQLite的低基数列上选择多行

在SQLite的低基数列上选择多行,sqlite,select,cardinality,Sqlite,Select,Cardinality,我在SQLite中有一个包含很多行的表,并且我经常需要基于一个大约为偶数拆分的二进制列来选择所有行(例如,男性/女性)。查询中没有必须满足的其他条件。我知道在这种情况下编制索引是不好的,但有没有其他方法可以加快编制索引的速度?比如整理桌子?我想除了做两张分开的桌子 编辑:如果SQLite中没有,那么在另一个基于SQL的RDBMS中有可能吗 我知道在这种情况下索引是不好的 在这些事情上总是要考虑正反两方面的,所以真正重要的是你给每一个人的重量。换句话说,通常建议自己进行尽职调查,而不是依赖其他人的

我在SQLite中有一个包含很多行的表,并且我经常需要基于一个大约为偶数拆分的二进制列来选择所有行(例如,男性/女性)。查询中没有必须满足的其他条件。我知道在这种情况下编制索引是不好的,但有没有其他方法可以加快编制索引的速度?比如整理桌子?我想除了做两张分开的桌子

编辑:如果SQLite中没有,那么在另一个基于SQL的RDBMS中有可能吗

我知道在这种情况下索引是不好的

在这些事情上总是要考虑正反两方面的,所以真正重要的是你给每一个人的重量。换句话说,通常建议自己进行尽职调查,而不是依赖其他人的经验法则

在我对一个包含100万行的SQLite db的计时中,二进制列在0和1之间平均分割,
SELECT COUNT(*),其中binary=0通过索引显著加快了速度。以下是《美国时报》:

   without an index: 0.06 secs
   with an index:    0.04 secs
对于10万行,差异更为明显

我知道在这种情况下索引是不好的

在这些事情上总是要考虑正反两方面的,所以真正重要的是你给每一个人的重量。换句话说,通常建议自己进行尽职调查,而不是依赖其他人的经验法则

在我对一个包含100万行的SQLite db的计时中,二进制列在0和1之间平均分割,
SELECT COUNT(*),其中binary=0通过索引显著加快了速度。以下是《美国时报》:

   without an index: 0.06 secs
   with an index:    0.04 secs

对于10万行,这种差异甚至更为明显。

嗯。。。索引“就像对表格进行排序”。要么忽略前面的建议,要么提供一个很好的参考,说明为什么在这种情况下索引是个坏主意。此外,表格内容是否变化很大,还是主要是静态的?我无法想象,强制系统在每次查询时重新扫描整个表比使用不太理想的索引要好。两个表听起来是一个非常烦人的选择,尤其是如果您有其他查询的话。我不认为必须进行联合和跨越其他障碍会比索引更好。在SQLite和另一个基于SQL的RDBMS之间做出决定可能应该基于,而不仅仅是是否对一个表进行索引。特别是因为SQLite是一个嵌入式数据库,专为本地无服务器数据库的特定需求而设计,而大多数其他SQL RDBMS将是服务器和fullfil其他需求。当然,基于这些因素,我选择了SQLite(无服务器是一个巨大的优势,主要是只读数据库,用户很少)。虽然查询的规模很大,但我的印象是,使用SQLite时,查询速度与使用其他系统时一样快(可能更快,因为没有服务器层,数据库太大,无法保存在内存中)。总之,我在SQLite中缺少了一些特性,例如物化视图,因此如果有其他优势,切换是一种选择。我还发现了一些关于拥有“低基数”索引比没有索引更糟糕的闲聊,原因有很多,比如许多索引查找效率较低。对于外键查找或辅助搜索(例如,在其他索引用于主排序之后),可能是这样的。但是,如果这样一个索引用于简单的选择,那么一个好的优化器可以将一个表划分为行块以进行高效处理,而不是查询每一行的索引。老实说,我不准备以这样或那样的方式为sqlite争论,但我认为不考虑/忽略是不好的。测试一下,嗯。。。索引“就像对表格进行排序”。要么忽略前面的建议,要么提供一个很好的参考,说明为什么在这种情况下索引是个坏主意。此外,表格内容是否变化很大,还是主要是静态的?我无法想象,强制系统在每次查询时重新扫描整个表比使用不太理想的索引要好。两个表听起来是一个非常烦人的选择,尤其是如果您有其他查询的话。我不认为必须进行联合和跨越其他障碍会比索引更好。在SQLite和另一个基于SQL的RDBMS之间做出决定可能应该基于,而不仅仅是是否对一个表进行索引。特别是因为SQLite是一个嵌入式数据库,专为本地无服务器数据库的特定需求而设计,而大多数其他SQL RDBMS将是服务器和fullfil其他需求。当然,基于这些因素,我选择了SQLite(无服务器是一个巨大的优势,主要是只读数据库,用户很少)。虽然查询的规模很大,但我的印象是,使用SQLite时,查询速度与使用其他系统时一样快(可能更快,因为没有服务器层,数据库太大,无法保存在内存中)。总之,我在SQLite中缺少了一些特性,例如物化视图,因此如果有其他优势,切换是一种选择。我还发现了一些关于拥有“低基数”索引比没有索引更糟糕的闲聊,原因有很多,比如许多索引查找效率较低。对于外键查找或辅助搜索(例如,在其他索引用于主排序之后),可能是这样的。但是,如果这样一个索引用于简单的选择,那么一个好的优化器可以将一个表划分为行块以进行高效处理,而不是查询每一行的索引。老实说,我不准备以这样或那样的方式为sqlite争论,但我认为不考虑/忽略是不好的。测试一下。