简化问题
为什么SELECT 1 FROM table WHERE {constraints}
后面跟Rails的array.length执行速度比SELECT COUNT(1) FROM table where {constraints}
快,并且这是一个关注内存膨胀的问题?
方案
与ActiveRecord: size vs count有些相似,我在使用ActiveRecord模型的Rails应用程序中工作,并且发现调用ar_query.select(1).length
通常比ar_query.count
更快,并且在许多情况下是多个500 +%更快。我假设前者在Rails中需要更多内存来处理数组而不是count,因为后者直接从数据库的COUNT(1)函数返回单个标量。除非有一些内容,否则时间差异有点违反直觉。
此代码用于高流量区域,并且每秒可以多次调用,因此性能是关键,但如果我不需要,我不希望不必要地使内存膨胀陷入困境。