博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql高效获取两张表共同字段的交集数据
阅读量:4555 次
发布时间:2019-06-08

本文共 674 字,大约阅读时间需要 2 分钟。

问题:

例如下面两站表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建立索引。

转载于:https://www.cnblogs.com/Alight/p/3873437.html

你可能感兴趣的文章
Docker技术入门与实战(第三版)-第1章 初识Docker与容器
查看>>
Docker技术入门与实战(第三版)-第3章 使用docker镜像
查看>>
LAMP环境安装
查看>>
git 添加add readme.txt 报fatal: pathspec 'readme.txt' did not match any files错误
查看>>
JS中 reduce() 的用法
查看>>
JS中的逻辑运算符&&、||,位运算符|,&
查看>>
vue-resource和axios区别
查看>>
Vue.js中 watch(深度监听)的最易懂的解释
查看>>
Three.js加载gltf模型
查看>>
js中的web加密
查看>>
关于各种文件用Editplus的方式打开出现“向程序发送命令时出现问题”的解决方法...
查看>>
[Codeforces261D]Maxim and Increasing Subsequence——树状数组+DP
查看>>
理解API和SDK的区别
查看>>
64. [Mcoi2018]终末之诗(上)
查看>>
关于进程的上下文切换
查看>>
你不知道的JS(作用域和闭包)
查看>>
[恢]hdu 1164
查看>>
vs2013 安装boost1.59
查看>>
[恢]hdu 2503
查看>>
调用动态库时声明的参数个数不一致导致的问题
查看>>