gpt4 book ai didi

mysql - "[MySQL] Joins are evil"- 卡尔亨德森

转载 作者:IT老高 更新时间:2023-10-29 00:01:58 25 4
gpt4 key购买 nike

Flickr 的 Cal Henderson 提供了 keynote address for DjangoCon 2008 .他简要谈到了 Django 框架在查询中使用表连接,并断言,“当你达到一定规模时,你不会使用连接。”我希望 Henderson 对这些事情了如指掌,但有谁知道他声称的可能原因是什么?

最佳答案

当我说他们是邪恶的时候,我有些夸大了。

对于非常大的数据集,即使它们适合单个数据库,连接也是一项昂贵的操作(大量非顺序 IO)。对于典型的 Web 应用程序负载(90/10 读/写),您的读取需要尽可能便宜,而您可以将更多时间花在写入上(并且在许多情况下懒惰地复制写入)。在典型的高性能 Web 应用程序中,您将希望在几百毫秒内执行所有数据库 IO,因此这是您的第一个限制。其次,您希望能够处理大量并发请求。这往往表明能够直接从大型表的索引中收集记录。有人已经提到您不需要向浏览器发送大量数据,因此不需要跨整个数据集执行连接,但请考虑排序:如果您无法直接从正确的顺序获取记录索引,您将需要在对结果排序之前执行整个连接。

对于多机分区数据,同样的问题也适用,但规模更大。通常的解决方案是物化 View (数据扁平化),通过在插入/更新/删除时(或之后延迟)执行多次写入并使用非常简单的索引选择来启用类似连接的查询。

显然,连接很有用,并且在大多数情况下都非常好。但是对于原生不支持物化 View 的数据库中的大型数据集,这在大型数据集的高并发下会下降。

关于 Django 的具体提示是,由于在现有数据上更改模型的灵 active 不足,因此鼓励人们创建仅连接的一对一映射表,而不是向现有表添加列。

关于mysql - "[MySQL] Joins are evil"- 卡尔亨德森,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1020847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com