问一个sql问题

@Ta 06-02 23:53发布,06-03 00:02修改 2430点击
有两个表如下
360截图20220602234315499.jpg
360截图20220602233910467.jpg

现在已知的方法如下
SELECT a.user,a.phone FROM a,b WHERE a.user=b.user
SELECT a.user,a.phone FROM a WHERE EXISTS(SELECT * FROM b WHERE b.user=a.user)
SELECT a.user,a.phone FROM a JOIN b on a.user=b.user
SELECT a.user,a.phone FROM a WHERE a.user in (SELECT user FROM b)


360截图20220602235336404.jpg

问题:
表A有接近8亿数据,表B有1W数据
查询相当耗时
怎么破
回复列表(8)
  • @Ta / 06-03 00:12 / /
    被锁定
    层主 @莫_名 于 2022-06-07 12:09 删除了该楼层。
  • @Ta / 06-03 00:16 / /
    @莫_名,高深的不会呀,我所知道的EXISTS大概是优于其他方法(来自百度)
  • @Ta / 06-03 00:31 / /
    被锁定
    层主 @莫_名 于 2022-06-07 12:09 删除了该楼层。
  • @Ta / 06-03 01:06 / /

    b JOIN a

    a表有覆盖索引了嘛

    这个是不是用户给出1W个用户名,查询它们的手机号的意思?否则基于uid比较会不会好点

  • @Ta / 06-04 12:46 / /
    表示也很想知道方法,八亿可不是小数目
  • @Ta / 06-08 23:11 / /

    @echo醉老仙,好奇最后有啥好解决方案了

    至少分个表了?

  • @Ta / 06-09 12:34 / /
    @无名啊,考虑三楼的建议,也是符合我理想的方案。
    曲线救国方案如下:
    1.前提:a表数据不再新增的情况下
    2.b表增加phone字段
    3.循环b表数据,从a表查询出结果,更新到b

    一万数据还是轻轻松松的
  • @Ta / 06-09 13:32 / /

    @echo醉老仙,为嘛a JOIN bb JOIN a会很慢呢?

    数据库不会自动做你说的第三点吗

添加新回复
回复需要登录