• mysql高效获取两张表共同字段的交集数据


    例如下面两站表A,B.A表和B表分别有5-10w数据。
    A表结构如下:
    id bid name title publisher extra
    B表结构如下
    id bid name title publisher
    A出版社也为很多人出版了书籍,B出版社也为很多人出版了书籍,有sql语句找出这两个出版社为那些人 共同出版书籍,用innerjoin太慢,有没有什么更好的办法?

    由于不知道你表的索引情况,所以至于用join还是in和exists不太好说,理论上讲,exists最快、in次之、join最慢,但是这个不是绝对 的,还需要看你的索引建立。建议你把表索引贴出来,或者分别用explain看看这三种方式MySQL的执行计划。然后再做相应的调优

    1. SELECT id, bid, name, title, publisher FROM A where publisher in (select publisher from B group by B.publisher)

    或者

    1. SELECT id, bid, name, title, publisher FROM A where exists (select publisher from B where B.publisher = A.publisher group by B.publisher)

    用EXISTS应该效率更高,另外对查询条件字段publisher建立索引。

    误区:用where,或innser,left join 都不可以

    参考:http://www.dewen.io/q/2125

  • 相关阅读:
    单行道
    学习C++50条忠告
    ROI
    OpenCV(图像处理)—访问像素的三种方法
    毕业课题项目——基于单目摄像头的距离测量
    API
    MFC
    STL
    debug、release
    Android中退出程序的提示框
  • 原文地址:https://www.cnblogs.com/Alight/p/3975140.html
Copyright © 2020-2023  润新知