【发布时间】:2010-12-13 13:19:15
【问题描述】:
我们有一个包含 20 多列的表的应用程序,这些列都是可搜索的。为所有这些列建立索引会使写查询非常慢;并且任何真正有用的索引通常都必须跨越多个列,从而增加所需的索引数量。
但是,对于 95% 的这些搜索,只需要搜索这些行中的一小部分,而且数量相当少 - 例如 50,000 行。
所以,我们考虑使用 mySQL 分区表 - 有一个基本上是 isActive 的列,这是我们划分两个分区的依据。大多数搜索查询将使用isActive=1 运行。然后,大多数查询将针对 50,000 行的小分区运行,并且无需其他索引即可快速运行。
唯一的问题是isActive=1 不固定的行;即它不是基于行的日期或任何类似的固定;我们将需要根据该行中数据的使用情况更新isActive。据我了解,这没问题;在 UPDATE 查询期间,数据只会从一个分区移动到另一个分区。
我们在id 上确实有一个PK 用于该行;我不确定这是否有问题;该手册似乎建议分区必须基于任何主键。这对我们来说将是一个巨大的问题,因为主键 ID 没有根据行是否为 isActive。
【问题讨论】:
-
如果 3NF 是所有性能问题的解决方案,那么没有人会创建星型模式。
标签: database-design mysql partitioning database-partitioning