gpt4 book ai didi

mysql - sql 性能 - 从多个表获取时的查询设计

转载 作者:行者123 更新时间:2023-11-29 14:33:17 25 4
gpt4 key购买 nike

好的,前提。三个表,对于本练习来说足够简单:

table first:
id, name

table second:
id, firstId, secondName

table third
id, thirdName, secondId

我想获取第三个行中所有与第二个行中具有外键的行,这些行与某个“第一”行 ID 相关。

典型的sql:

select t.id, s.id as secondId, t.thirdName, s.secondName from third t 
inner join second s on t.secondId=s.id where s.firstId = X

这是我的问题:

在第三列中有一个列而不是直接作为第一列的外键,性能会更快吗?

table third:
id, secondId, firstId, name

这样我就可以进行查询:

select t.id, s.id as secondId, t.thirdName, s.secondName from third t 
inner join second s on t.secondId=s.id where t.firstId = X

由于我也需要来自“第二个”的数据,因此连接并不少,但我会从第三个而不是第二个中查找“firstId”。

只是好奇是否有人有任何意见:)

最佳答案

假设第二种方式更快,如果您将第一个查询重写为:

select t.id, s.id as secondId, t.thirdName, s.secondName from second s
inner join third t on t.id=s.id where s.firstId = X

注意第二第三的位置交换。这样,您将看到与第二个示例完全相同的性能,但第三个表会更小,因为它没有额外的冗余字段。

要指出没有此字段的好处,更容易指出添加额外的冗余字段会对性能产生什么影响:

  • 消耗更多磁盘空间
  • 减慢任何表扫描,因为行现在稍微更长
  • 更新性能也会稍微变慢
  • 除此之外...

虽然是理论上的,但总体来说听起来很像过早的优化,只有如果您现有的查询很慢(即使在上面重写它时),您才应该这样做,到那时,只需改进索引,您就会获得更好的返回。

关于mysql - sql 性能 - 从多个表获取时的查询设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9616455/

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