2

我正在使用 MySql 数据库,其中有一个名为books.

我想实现一个系统,用户可以通过该系统关联两个项目,以便在查看一个项目时,它会显示到另一个项目的链接。

我的问题是我想这样做的方式是,当book1( id==1) 链接到book2( id==2) 时,也book2链接到book1,反之亦然。

我想这样做的方法是创建一个新表,称为relations并至少有两个 colscol1col2,我在其中保存所有相关项目的 id。例如,和的行book1看起来book2像这样:

  —————————————————
 |  COL1  |  COL2  |
  —————————————————
1|   1    |   2    |
  —————————————————

所以在查看时book1我会SELECT * FROM 'relations' WHERE COL1 = '1' OR COL2 = '1'

我想以这种方式它应该可以工作,但我想知道是否有更好/更有效的方法来处理这个问题。

4

1 回答 1

0

“or” - 子句是索引使用的杀手。我会说,如果你的关系是对称的,只需将两对添加到表中 - 所以 1-2 和 2-1。

它使所需的空间增加了一倍,但是 - 那是 SQL。;-)

编辑澄清“杀死索引”:当您在 col1 上有索引时,请求

select col2 from correlation_table where col1 = 12

非常快,而语句

select col1, col2 from correlation_table where col1 = 12 or col2 = 12

速度很慢,一旦你有很多关系,你就需要 col1 上的索引和 col2 上的一个索引,你必须将查询分解为

    select col1, col2 from correlation_table where col1 = 12
  union
    select col1, col2 from correlation_table where col2 = 12
于 2013-04-28T18:23:09.413 回答