为啥在大型数据库上查找具有特定 ID 的对象的 Django 查询比在较小数据库上要慢?
Posted
技术标签:
【中文标题】为啥在大型数据库上查找具有特定 ID 的对象的 Django 查询比在较小数据库上要慢?【英文标题】:Why does a Django query that looks for an object with a specific id is slower on a large DB than on a smaller one?为什么在大型数据库上查找具有特定 ID 的对象的 Django 查询比在较小数据库上要慢? 【发布时间】:2018-10-05 15:07:09 【问题描述】:为什么会有这样的查询:
MyModel.objects.get(id=1)
在非常大的 DB 表上比在小型 DB 表上运行更慢,甚至是一点点? (例如 10 行表与 100 万行表)
明显与 SQL 相关还是由处理查询的软件(在本例中为 Django)引起的?
【问题讨论】:
【参考方案1】:Django 不“处理查询”。它实际上运行必要的 SQL 命令来搜索给定的对象。
明显与 SQL 相关还是由处理查询的软件(在本例中为 Django)引起的?
嗯,事情没那么简单。对于大型数据库,很多事情开始考虑。例如,您的硬件有多好。你的磁盘和 CPU 的速度有多快,RAM 有多少等。
这就是为什么当您的数据库增长并开始看到性能下降时,您需要在 RAM 中缓存数据库,或者至少是经常访问的对象。如果 RAM 太贵或无法升级,还有另一种称为 Sharding 的技术,它基本上是将数据库分散在多个服务器中。
我确信进行 google 搜索会产生大量关于优化数据库性能的详细文章。
【讨论】:
谢谢!此外,根据我过去几天的发现,索引在查询执行的速度方面起着重要作用。首先引发我的问题的是我的错误假设,即每个数据库中的每个 .get(id=x) 操作都是 O(1),无论它们的大小如何。以上是关于为啥在大型数据库上查找具有特定 ID 的对象的 Django 查询比在较小数据库上要慢?的主要内容,如果未能解决你的问题,请参考以下文章