MYSQL一种常见的应用场景的效率问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

MYSQL一种常见的应用场景的效率问题

例如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
但是我发现当数据量比较多的时候效率很一般。请问有没有更好的替代方案

展开
收起
蛮大人123 2016-02-08 10:25:53 2091 0
1 条回答
写回答
取消 提交回答
  • 蛮大人123
    我说我不帅他们就打我,还说我虚伪

    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)

    2019-07-17 18:39:29
    赞同 展开评论 打赏
问答排行榜
最热
最新
相关电子书
更多
让 MySQL 原生分布式触手可及
立即下载
好的 MySQL 兼容可以做到什么程度
立即下载
云数据库RDS MySQL从入门到高阶
立即下载