我的问题的更一般的版本已经比克问:Count vs len on a Django QuerySet计数VS LEN在Django的查询集时的一些结果进行过滤
我的情况有点不同,虽然。它开始是这样的:
messages = Message.objects.filter(foo=bar)
要获得error_message_count
和other_message_count
,哪个更好?
error_message_count = len(message for message in messages if message.is_error)
other_message_count = len(messages) - error_message_count
或:
error_message_count = messages.filter(is_error = True).count()
other_message_count = messages.count() - error_message_count
甚至:
error_message_count = messages.filter(is_error = True).count()
other_message_count = messages.filter(is_error = False).count()
我怀疑是第一个解决方案可以归结为只有一个查询,其他两个。但也许Django和/或DBMS使第二个更有效率?
我会接受'简介'作为答案,但我想知道这些解决方案是否被认为是最佳实践。
你以后使用了那些请求的消息,还是只想得到两个数字,就是这样?预计在原始过滤列表中有多少条消息(几十,几千条)?列表中错误的预期比例是多少? – serg
好问题,但我其实不确定答案。这些数字用于页面顶部的状态图标;用户可以点击它来查看消息,或忽略它。我不确定消息的数量,但是如果有超过数十个消息,我会感到惊讶(在我的情况下,这个问题更多是关于风格而不是性能,但有人可能会有相同的问题,申请一天)。我也不确定会出现错误的比例;用户希望它非常小,但实际上取决于第三方数据的质量。 –