我的Django应用程序中有一个使用简单历史记录(https://github.com/treyhunner/django-simple-history)的Location对象,我需要经常在两个日期之间查询该对象的历史记录。我知道你可以这样做:
Location.objects.filter(id=1, history_date__range=(starttime, endtime))
但是,我注意到,给定id的所有历史记录都是从最新到最早排序的。这意味着我应该能够在该列表上进行二进制搜索以包含所有日期。
我的问题是 - 在
之后硬编码python二进制搜索Location.objects.filter(id=1)
比仅使用上述查询更快还是更慢?
答案 0 :(得分:1)
这一切都取决于您使用的数据库。在大多数数据库中,存在一种隐含的"自然顺序"行:当行插入数据库时。这可能是它的显示方式,但并不能保证订购。
如果您关注计算时间,可以在history_date上放置索引,因此获取有序列表的时间为O(log(n))。但是,插入,更新和删除需要稍长时间!