• 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

  • 相关阅读:
    1月28日 layout_list_item
    1月27日 listview_MyListAdapter
    1月26日 listviewxml
    1月25日 textview
    1月24日 人月神话3
    体温填报(三)
    体温填报(二)
    体温填报(一)
    家庭记账本(六)
    家庭记账本(五)
  • 原文地址:https://www.cnblogs.com/Alight/p/3975140.html
Copyright © 2020-2023  润新知