SQL 优化

问题描述

select column1,column2 from table1 left join table on .... where 条件unionselect column1,column2 from table2 left join table on .... where 条件unionselect column1,column2 from table3 left join table on .... where 条件只有 table1,table2,table3 不一样,其他都一样,这类的SQL 有优化的余地么? 问题补充:补充下场景:1. SQL 需要支持 My SQL, Oracle, SQL Server2. column1 是 table 那个表的, column2 是 count 出来的,条件后面其实还有 group by.3. 在这个SQL 外面还有一层 select * from (SQL) group by ... 的动作.

解决方案

1、union ---------> union all 到程序里排重2、3条sql单独查
解决方案二:
这个还是要根据实际业务场景,看数据量,以及要的结果数据。1、union all到程序里排如果数据量很大,应用是否能承受?2、单独查,累积结果,业务场景就是查询吗?会不会有分页及其它一类的操作?所以还是要根据实际业务场景。
解决方案三:
优化方式1:union(all|distinct)会在内存中新建一个虚拟表,然后把三个查询结果插入该虚拟表中。这其中union distinct(缩写为union)会涉及到去重的问题,所以在效率上会低于union all,可以将union 改为union all,然后在程序中执行去重优化方式2:可以分开三条语句分别执行,然后在程序中累加这三个结果,然后去重操作,这样效率也会有优化

时间: 2024-10-21 20:19:05

SQL 优化的相关文章

sql优化器探讨

优化 多年以来,商业数据库生产商一直致力于提高数据库的查询性能.尽管他们持续地付出努力和辛勤地工作,我们还是无法看到关系型数据库系统(rdbms)在性能上有显著的提高.用户继续忍受性能低下的sql语句,数据库专家们继续在sql语句优化的泥潭中痛苦挣扎. 本文将介绍数据库查询优化器是如何工作的.为什么问题持续存在,并深入探讨数据库查询优化器将来的发展方向. 数据库查询优化器 数据库查询优化器是rdbms服务器的一个组成部分.对于基于成本的优化,数据库查询优化器的任务是,通过产生可供选择的执行计划,

Oracle sql 优化小结

对于sql优化,从实际工作经验出发,总结如下: 1).where过滤部分,等式左边不要带任何计算和嵌套函数,想办法等价替换,在等式右边去做变动: 2).能手动计算的部分,手动算好写上固定的值,不要写一个表达式在sql里,让程序每次去重算: 3).3个及以上大表关联,慢到跑个30分钟都不出结果,最直接简单的方法是建一个临时表,拆分多表关联为多个2表关联的等价sql; 4).对于非常慢的sql,可以尝试重新获取源表信息,获取新的执行计划: 5).在实现逻辑时,对于有排序操作的关键字(order by

SQL优化过程中常见Oracle HINT的用法

在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT'; 2. /*+FIRST_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化.

SQL优化34条

我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习.摘录.并汇总部分资料与大家分享!(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个

mysql 查询重复的数据的SQL优化方案

 在mysql中查询不区分大小写重复的数据,往往会用到子查询,并在子查询中使用upper函数来将条件转化为大写.如:   代码如下: select * from staticcatalogue WHERE UPPER(Source) IN (SELECT UPPER(Source) FROM staticcatalogue GROUP BY UPPER(Source) having count(UPPER(Source))>1) ORDER BY upper(Source) DESC;   这条

SQL优化一例

  今天闲的 看awr,发现一条SQL 每次执行40多秒,语句如下 ? 1 SELECT a.bill_class AS pol_code , b.bill_name AS pol_name , a.bill_no AS card_no , '网站' AS buy_path , a.rev_clerk_code AS agent_code , a.rev_clerk_type AS agent_type , to_char(a.regist_date, 'yyyy-mm-dd') AS reci

SQL优化器原理 - Join重排

这是ODPS有关SQL优化器原理的系列文章之一.我们会陆续推出SQL优化器有关优化规则和框架的其他文章.添加钉钉群"关系代数优化技术"(群号11719083)可以获取最新文章发布动态. 本文的目标是解释Join重排这个特性的基础概念和算法,如果想快速了解并在MaxCompute上使用这个特性,请直接跳到"总结". 简介 Join重排是经典的SQL优化问题.考虑3个表的自然连接 A ⋈ B ⋈ C ,在不影响最终结果集的前提下,可以改变连接的顺序为下列: A ⋈ C

一次耐人寻味的SQL优化:除了SQL改写,还要考虑什么?

作者介绍 黄浩,现任职于中国惠普,从业十年,始终专注于SQL.在华为做项目的两年多,做过大大小小的SQL多达1500个.闲暇之余,喜欢将部分案例写成博客发表在华为内部数据库官方社区,反响强烈,已连续四个月蝉联该社区最佳博主.目前已开设专栏"优哉悠斋",成为首个受邀社区"专家访谈"的外协人员.   这是一次值得纪念的优化,值得回忆的内容非常丰富,虽然这个SQL本身并不复杂,几乎是一个相对规范式的SQL,所以,这次优化的重点并不是SQL的改写,而更多的是业务需求.物理模

智能运维:美团SQL Advisor的自动化SQL优化实现

介绍 在数据库运维过程中,优化 SQL 是 DBA 团队的日常任务.例行 SQL 优化,不仅可以提升程序性能,还能够降低线上故障的概率. 目前常用的 SQL 优化方式包括但不限于:业务层优化.SQL逻辑优化.索引优化等.其中索引优化通常通过调整索引或新增索引从而达到 SQL 优化的目的.索引优化往往可以在短时间内产生非常巨大的效果.如果能够将索引优化转化成工具化.标准化的流程,减少人工介入的工作量,无疑会大大提高DBA的工作效率. SQLAdvisor 是由美团点评公司北京DBA团队开发维护的

MySQL · 性能优化· CloudDBA SQL优化建议之统计信息获取

阿里云CloudDBA具有SQL优化建议功能,包括SQL重写建议和索引建议.SQL索引建议是帮助数据库优化器创造最佳执行路径,需要遵循数据库优化器的一系列规则来实现.CloudDBA需要首先计算表统计信息,是因为: 数据库优化器通常是基于代价寻找执行路径: SQL优化建议所针对的数据库不限于MySQL数据库,也不局限于某一个特定版本: 1. 基本原则 数据库统计信息在SQL优化起到重要作用.用来估算查询条件选择度的常见统计信息包括表统计信息和字段统计信息.DBA计算查询条件选择度或代价时经常通过