我正在使用MySql数据库,我有一个名为books
的表。
我想实现一个系统,用户可以通过该系统关联两个项目,这样当查看一个项目时,它会显示一个指向另一个项目的链接。
我的问题是我希望以book1
(id==1
)与book2
(id==2
)相关联的方式执行此操作,{{1 }}链接到book2
,反之亦然。
我想要这样做的方法是制作一个名为book1
的新表,并至少有两个col relations
和col1
,其中我保存了ids所有相关项目。
例如,col2
和book1
的行如下所示:
book2
因此,在查看 —————————————————
| COL1 | COL2 |
—————————————————
1| 1 | 2 |
—————————————————
时,我会book1
我想通过这种方式它应该可行,但我想知道是否有更好/更有效的方法来解决这个问题。
答案 0 :(得分:0)
“或” - 子句是索引使用的杀手。我会说如果你的关系是对称的,只需将两个对添加到表中 - 所以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