数据库多表查询效率问题
来源:互联网 发布:淘宝网站图片无法显示 编辑:程序博客网 时间:2024/04/29 09:23
今天做项目时,用到了多表查询。有三个表分别为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
query1 和 query2 都是可以使用我们到此为止讨论的所有查询特性的查询。集合操作也可以嵌套和级连,比如
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。
效率较前两种情况明显的提高了。从而解决了问题。
- 数据库多表查询效率问题
- 数据库多表查询效率问题
- 数据库多表关联查询效率问题解决方案
- 数据库查询效率
- 提高数据库查询效率
- 数据库查询效率
- 数据库查询效率
- 数据库查询效率
- 数据库查询效率优化
- ibatis多表查询效率缓慢的问题。
- Oracle数据库中分页查询中排序及效率问题
- oracle 查询效率问题
- 查询效率问题??
- 分页查询效率问题
- MySQL查询效率问题
- 提升数据库查询效率小结
- 提升数据库数据查询效率
- 提高数据库查询效率小结
- 清空缓冲区
- 关于RGB、YUY2、YUYV、YVYU、UYVY、AYUV【转】
- Java的垃圾收集机制
- 雷军:互联网创业的葵花宝典
- 批处理 复制并压缩文件
- 数据库多表查询效率问题
- ftp出现dos可以访问,而IE无法访问的问题
- 简单WEB服务器源码
- 重温Linux Driver基础之Hello World
- Django: 当CharField和TextField的null= True时,保存的是u'',而不是null
- Linux用户管理
- 基于Chrome开源提取的界面开发框架开篇
- VC改变控件的背景颜色 字体 文本颜色
- UVA 103 - Stacking Boxes