MySQL中每个客户端一个新表?

6

通常情况下,我不会考虑这个问题,但我想知道可能有哪些方面会造成不利影响?

我的当前设置:

  • 每个客户端最多有大约150,000行
  • 我正在对两列进行全文搜索
  • 另一列是客户端的ID

随着表格越来越大,搜索变得非常缓慢,即使在最多的情况下,每次搜索仅需要在150,000行上执行。

使用全文索引时,仅仅搜索客户端的行变得非常困难。

一个选择是创建第三个全文列,它将客户端的ID与在全文行中找不到的字符合并,并将此第三列包含在总的全文搜索中。 非常繁琐。

为每个客户端设置唯一的表格并只搜索他们的表格是否非常非常错误? 在我的测试中,搜索非常快速。 一旦您开始需要多个MySQL服务器,这种方法会如何?

2个回答

4
也许你应该看看这篇文章:
http://www.mysql.com/products/enterprise/partitioning.html

and this one too:

http://dev.mysql.com/doc/refman/5.1/en/partitioning.html

这种逻辑与“为每个客户创建一张表”的方式有些不同,但它应该能够满足您的需求。


谢谢Kevin。我有个初学者问题——我的大多数查询都是通过主键进行的,所以我会按照主键进行分区。但是,有些查询也是按日期和其他“类型”分类的。如果它们的数据随机分布在分区中,我仍然可以设置日期和类型索引吗?谢谢。 - Shaun
@Shaun: 不确定这是否解答了你的疑问。无论如何,这个链接http://dev.mysql.com/doc/refman/5.1/en/partitioning-overview.html,报告:“重要提示: 分区适用于表的所有数据和索引;您不能仅对数据或索引进行分区,也不能反过来分区,也不能仅对表的某一部分进行分区。” - Kevin Cittadini

1
一般而言,分区优于手动将数据拆分到多个表中。但是,需要注意一些分区的注意事项。特别是,不支持外键
对于您具体的用例,有一个原因可以选择“手动拆分”路线:分离全文搜索的统计信息

相关性是根据行中单词数、该行中唯一单词数、集合中单词总数以及包含特定单词的文档(行)数量计算的。

如果所有数据都存储在一个单独的表中(无论是否进行分区),则属于一个给定用户的数据会影响所有用户的相关性得分。
显然,如果您从不按相关性排序搜索结果(即仅查找布尔匹配),则不适用此规则。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接