一个大表性能与一个带有一些连接的小表

时间:2018-04-05 05:48:55

标签: mysql database database-design

我想知道我是否有一个大表(50列和50万条记录)并且我想使用select查询,如果我将我的大表拆分为一个较小的表(20列和50万条记录)加入一些小表(大约5列),我想使用相同的选择,这些方式中的哪一种在速度方面更好?

例如:

第一个包含巨大表格的案例:

select username,password,nationalAdd from baseTBL

使用较小的表和一些连接的第二种情况:

select username,password,nationalAdd from baseTBL
inner join dependTBL1 on baseTBL.user_id=dependTBL1.id 
inner join dependTBL2 on baseTBL.national_id=dependTBL2.id

1 个答案:

答案 0 :(得分:1)

通常答案是:垂直分区没有性能优势。此外,很少从水平分区中获得性能优势。

我会在这里解决垂直问题。

  • 不要跨列显示数组。示例:家庭/工作/手机号码;多个地址。最好与另一张桌子保持1:多的关系。
  • 如果您有一些“很少”存在的列,请考虑对它们进行垂直分区,但忽略行而不是NULLs
  • 如果在分区后你将有一个WHERE子句触及两个表,这对性能来说真的很糟糕。将所有搜索条件保留在主分区中。
  • 如果某些列具有大量重复值,并且值为“冗长”,请考虑将这些值“标准化”。 (这很像垂直分区,但它被认为是另一种东西。)
  • 不要过度正常化。示例:将city + state + postal_code + country分解为单个Location表,而不是4个表。

结论:您的问题过于模糊,无法为您提供适用于 架构的答案。