例如A表
aid,acontent
1,内容a
B表
bid,bcontent
abc,内容b
C表是A和B的关联表
我现在是这样设计的C表:
abid,ccontent
1@abc,内容c
这样好处是在SELECT的时候可以用substring_index(abid,'@',1)=aid或substring_index(abid,'@',-1)=bid来跟A表或B表做关联。同时可以让abid这个字段非重索引,以后添加修改C表的数据可以直接replace into
但是我发现当数据量比较多的时候效率很一般。请问有没有更好的替代方案
C表为什么不是
aid, bid, ccontent
1, abc, 内容c
关联更简单, C.aid = A.aid;
在(aid, bid)上建了唯一索引 也可以replace into
索引也更加灵活, a, b, (a,b), (b,a)上皆可建索引, 具体看你的需求
更新:
联合唯一索引:
mysql> create table a1 (a int, b int, unique key (a,b));
Query OK, 0 rows affected (0.13 sec)
mysql> show create table a1; | |
---|---|
Table | Create Table |
-----------------------------------------------------------------+ | |
a1 | CREATE TABLE a1 ( |
a
int(11) DEFAULT NULL,b
int(11) DEFAULT NULL,
UNIQUE KEY a
(a
,b
)
1 row in set (0.02 sec)
更新: replace into
mysql> delete from a1;
Query OK, 1 row affected (0.04 sec)
mysql> replace into a1 values(1,1, 1);
Query OK, 1 row affected (0.00 sec)
mysql> select * from a1; | ||
---|---|---|
a | b | c |
1 | 1 | 1 |
1 row in set (0.00 sec)
mysql> replace into a1 values(1,1, 2);
Query OK, 2 rows affected (0.02 sec)
mysql> select * from a1; | ||
---|---|---|
a | b | c |
1 | 1 | 2 |
1 row in set (0.00 sec)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。