博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库多表查询效率问题
阅读量:3520 次
发布时间:2019-05-20

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

今天做项目时,用到了多表查询。有三个表分别为et_task_termtt,et_core_thes_term_category ttc , et_core_thes_terms t 其中tt.termid=t.id、ttc.termid=t.id
刚开始时用自然连接,sql语句为:select t.name from et_task_term tt,et_core_thes_term_category ttc , et_core_thes_terms t where tt.termid=ttc.termid and tt.taskid=50487 and ttc.inschemeid=14653 and ttc.categoryno='56GA' and tt.termid=t.id   运行时间为:3781ms

效率太低下,不能采用这种方式。

然后改为左外连接,sql为:select t.* from et_core_thes_terms t left outer join et_core_thes_term_category ttc on t.id =ttc.termid left outer join et_task_term tt on t.id =tt.termId where ttc.categoryno='56GA'  and tt.taskid=504875  运行时间为:2985ms。虽然比自然连接效率高些,但是还是低下。最后经过查询数据库手册想到了组合查询,组合查询包括并,交,差,语法为:

query1 UNION [ALL] query2query1 INTERSECT [ALL] query2query1 EXCEPT [ALL] query2

query1query2 都是可以使用我们到此为止讨论的所有查询特性的查询。集合操作也可以嵌套和级连,比如

query1 UNION query2 UNION query3

实际上说的是

(query1 UNION query2) UNION query3

 

UNION 有效地把 query2 的结果附加到 query1 的结果上(不过我们不能保证这就是这些行实际返回的顺序)并且删除结果中所有重复的行, 就象DISTINCT做的那样,除非你声明了UNION ALL

INTERSECT 返回那些同时存在于 query1 的结果中和 query2的结果中的行,除非声明了INTERSECT ALL, 否则所有重复行都被删除。

EXCEPT 返回所有在 query1 的结果中但是不在 query2 的结果中的行。 (有时侯这叫做两个查询的。) 除非声明了 EXCEPT ALL,否则所有重复行都被删除。

为了计算两个查询的并,交,差,这两个查询必须是"并集兼容的",也就意味着它们都返回同样数量的列, 并且对应的列有兼容的数据类型。

最后的sql语句为:

select ect.id,ect.name from ( select ttc.termid from et_core_thes_term_category ttc where ttc.categoryno='56GA' and ttc.inschemeid=14653

INTERSECT   select t.id from et_core_thes_terms t where t.thesid=14652
 
INTERSECT  select tt.termid from et_task_term tt where tt.taskid=504875 ) a,et_core_thes_terms ect  where a.termid=ect.id  运行时间为:203ms。

效率较前两种情况明显的提高了。从而解决了问题。

转载地址:http://pymqj.baihongyu.com/

你可能感兴趣的文章
中国大学MOOC—陆军工程大学数据结构MOOC习题集(2018秋)7-3 中位数
查看>>
Java发送邮件 注册成功发送邮件
查看>>
Mybatis的简单使用(增删改查),解决数据库字段名和实体类映射属性名不一致的问题
查看>>
Mybatis配置log4j文件 分页查询(limit,rowBounds)
查看>>
Mysql利用注解进行开发
查看>>
Mybatis一对多查询,多对一查询
查看>>
Spring配置bean.xml文件的头目录模板
查看>>
代理模式之------动态代理
查看>>
Spring实现AOP的三种方式
查看>>
Mybatis-Spring简单的配置和使用,配置事务
查看>>
SpringMVC和Mybatis整合使用的配置文件
查看>>
代码特效插件pycharm
查看>>
python实现tcp客户端从服务端下载文件
查看>>
将字符串 “k:1|k1:2|k2:3|k3:4” 转换成字典{“k”:1,”k1”:2,”k2”:3,”k3”:4}
查看>>
AttributeError: 'tuple' object has no attribute 'decode'
查看>>
node爬虫(牛刀小试)
查看>>
关于vue的seo优化
查看>>
字符串在html中的页面中的换行
查看>>
react父子组件间的通信和传值
查看>>
vue-cli3.0设置环境变量
查看>>