1

我关于 SEARCH 查询性能的问题。

我已经将数据展平到一个只读的 Person 表 (MySQL) 中,该表纯粹是为了搜索而存在的。该表有大约 20 列数据(主要是有限的文本值、日期和布尔值,还有几列包含无限的文本)。

Person
=============================================================
id      First   Last    DOB         etc (20+ columns)...
1       John    Doe     05/02/1969
2       Sara    Jones   04/02/1982
3       Dave    Moore   10/11/1984

另外两个表支持 Person 和 Activity 之间的关系。

Activity
===================================
id      activity
1       hiking
2       skiing
3       snowboarding
4       bird watching
5       etc...

PersonActivity 
===================================
id      PersonId        ActivityId
1       2           1
2       2           3
3       2           10
4       2           16
5       2           34
6       2           37
7       2           38
8       etc…

搜索注意事项:

  1. Person 表可能有 200-300k+ 行
  2. 每个人可能有 50 多项活动
  3. 搜索可能包括活动过滤器(例如,选择具有一项和/或多项活动的人)
  4. 返回的结果与人员详细信息和活动一起显示为项目符号列表

如果 Person 表仅用于搜索,我想知道是否应该将活动作为逗号分隔值添加到 Person 表,而不是加入 Activity 和 PersonActivity 表:

Person
===========================================================================
id     First    Last    DOB         Activity    
2      Sara     Jones   04/02/1982  hiking, snowboarding, golf, etc.

考虑到上述搜索注意事项,这会有助于还是损害搜索性能?
感谢您的输入。

4

1 回答 1

3

可怕的想法。您将失去在查询中使用索引的能力。如果您想在该列上进行搜索,在任何情况下都不要将数据存储在逗号分隔的列表中。Realtional 数据库的设计目的是在将表连接在一起时具有良好的性能。您的数据库相对较小,如果您正确索引,则根本不会出现性能问题。

您可能仍希望以逗号分隔的方式显示结果。我认为 MYSQL 有一个名为 GROUP_CONCAT 的函数。

于 2013-05-10T17:04:29.770 回答