MySQL中每个客户端的新表?

时间:2013-11-19 10:26:17

标签: mysql full-text-search

通常我不会考虑这个,但我想知道这会有什么不利之处呢?

我目前的设置:

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

随着表格越来越大,搜索变得非常缓慢,尽管大多数情况下,每次搜索只需要在150 000行上执行。

在使用全文索引时,只能搜索客户端的行很难。

一种选择是创建第三个全文列,该列是客户ID的复合,加上在全文行中找不到的字符,并在全文搜索中包含第三列。啊。

为每个客户端设置一个唯一的表,只搜索他们的表是非常错的吗?我的测试中搜索速度非常快。一旦你开始需要多个MySQL服务器,这会怎么样?

2 个答案:

答案 0 :(得分:4)

也许你应该看一下这篇文章:

http://www.mysql.com/products/enterprise/partitioning.html

也是这个:

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

这个逻辑与“每个客户的桌子”有点不同,但它应该符合您的需求。

答案 1 :(得分:1)

通常,分区比在多个表上手动分割数据更受欢迎。有一些需要注意分区的注意事项。特别是foreign keys are not supported

对于您的特定用例,您有一个理由想要采用“手动拆分”路线:分隔statistics for your fulltext searches

  

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

如果所有数据都存储在一个签名表中(无论是否已分区),属于一个给定用户的数据会影响所有用户的相关性分数。

显然,如果您从未按相关性排序搜索结果(例如,如果您只是查找布尔匹配),则不适用。