【Oracle】使用case when语句导致SQL查询速度很慢的情况
【Oracle】使用case when语句导致SQL查询速度很慢的情况
很多时候会使用到case when语句去对SQL的多种情况进行处理,decode也用的多,但是通常decode会用在固定值的数据处理上,而case when因为可以在其中增加语句,所以比较复杂的时候会用到
同时因为case when的结果集是从上到下的顺序进行,及优先级是自上而下的减少,例如下面的语句输出结果就是1
select
case when 1=1 then 1
when 2=2 then 2
end as flag
from dual
那么如果是复杂一点的情况呢,比如这种比较时间的情况,速度还是挺快的
select
case when ((select count(1) from dual where sysdate between to_date('2023-10-01','yyyy-mm-dd')and to_date('2023-10-03','yyyy-mm-dd')) > 0) then 1
when ((select count(1) from dual where sysdate between to_date('2023-07-01','yyyy-mm-dd')and to_date('2023-10-01','yyyy-mm-dd')) > 0) then 2
end as flag
from dual
那么再复杂一点的情况呢,比如当table1中的tt字段查询view123中的tt字段符合情况
select
case when ((select count(1) from view123 where table1.tt = view123.tt) > 0) then 1
when ((select count(1) from view123 where table1.tt = view123.tt) = 0) then 2
end as flag
from table1
会发现突然速度就下来了,但是如果找到数据单独执行这个语句,可能0.01秒内就可以执行出来,但是放在整个SQL中,可能会导致几十秒
select count(1) from view123 where table1.tt = view123.tt
这种很有可能因为case when的语句过于复杂,导致本来应该走索引的时候没走,可能还创建了临时表导致更加的慢
下午遇到的情况是一个视图,是第三层视图中的上层,在其中对某些日期进行条件分析,不同条件数据不同,同时还要对一个关联性不强的表进行一个数据集查询,在增加了case when以后,发现本来是十多秒的查询变成了五分钟才能出现结果,且在检查测试后发现是case when中的连表关系查询导致的
但是不能不用,因此,将这部分数据单独取出,放在第二层视图中作为一个变量,这样只使用一次的情况下,就增加了十秒的速度,还能接受,如果要彻底优化,最好直接将这个数据作为一个标识放在需要的表中,直接查表会快很多
【Oracle】使用case when语句导致SQL查询速度很慢的情况的更多相关文章
- 【Navicat】使用navicat执行sql 查询速度很慢解决方法
========================== Navicat 远程连接Mysql执行普通sql速度慢问题: 场景: navicat可以连接上 远程服务器的mysql.但是在navicat执行最 ...
- SQL查询速度慢的原因分析和解决方案
SQL查询速度慢的原因分析和解决方案 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建 ...
- sql查询速度慢分析及如何优化查询
原因分析后台数据库中数据过多,未做数据优化数据请求-解析-展示处理不当 网络问题提高数据库查询的速度方案SQL 查询速度慢的原因有很多,常见的有以下几种:1.没有索引或者没有用到索引(查询慢最常见的问 ...
- 并行查询提高sql查询速度
新项目在使用Oracle开发中遇到测试库千万级数据导致数据慢,除去加索引和存储过程可以明显提速外,使用并行也可以提速 select /*+parallel(a,8)*/ a.* from a 加上/* ...
- SQL查询速度
查询速度 https://www.cnblogs.com/ZaraNet/p/9558272.html 影响你的查询速度的原因是什么? 网速不给力,不稳定. 服务器内存不够,或者SQL 被分配的内存不 ...
- mybatis分页查询,SqlServer 2008 查询速度很慢
一个业务场景,需要进行union查询: 查询速度非常慢,大概要37秒: 直接复制sql在数据库客户端执行,速度很快,由此可知是mybatis的原因,在网上搜索,可以配置fetchSize=" ...
- Java连接MySQL数据库实现用户名密码的验证方法 Java语句中sql查询语句'' ""作用
//方法一,可以验证登录,但方法不实用.package com.swift; import java.sql.Connection; import java.sql.DriverManager; im ...
- 如何提高sql查询速度
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- mysql(数据库,sql语句,普通查询)
第1章 数据库 1.1 数据库概述 l 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作. l 什 ...
- 数据库原理-SQL查询语句
参考书籍<Oracle 数据库开发与应用> SQL查询语句,针对数据库中的表提供了各种查询功能.这里分为五个部分,说明在SQL中如何对数据进行查询. 简单查询 SELCET语句是最简单的S ...
随机推荐
- centos 养成计划
20220720 常用命令 pm2 list pm2 delete all 启动前端 cd /root/website && pm2 start http-server 启动后端 cd ...
- 告别繁琐!1分钟带你构建RabbitMQ消息应用
支持.Net/.Net Core/.Net Framework,可以部署在Docker, Windows, Linux, Mac. RabbitMQ作为一款主流的消息队列工具早已广受欢迎.相比于其它的 ...
- HTML(html结构、标签导读 、路径))
HTML第一天 我们接下来是进行的网页开发网页的相关概念: 什么是网页? 什么是HTML? 网页的形成? 一 什么是网页: 1.网站是指在因特网上根据一定的规则,使用 HTML 等制作的用于展示特定内 ...
- 探讨三维模型OBJ格式轻量化在三维展示效果上的重要性
探讨三维模型OBJ格式轻量化在三维展示效果上的重要性 三维模型的OBJ格式轻量化在三维展示效果方面具有重要性.以下是对三维模型OBJ格式轻量化在三维展示效果上的重要性进行分析: 1.提高渲染性能:原始 ...
- %USERPROFILE% 查看系统变量
%USERPROFILE% =C:\Users\用户名 win+r,输入cmd 回车 在cmd窗口下输入 set 回车,可以查看系统变量(想要了解更多 set 命令请看 这里)
- @Value static静态变量注入
@Component public class Config { @Value("${config1}") private static String config1; } 使用上 ...
- java 控制台 输出进度条
效果 代码 public static void main(String[] args) { int total = 100; for (int i = 0; i < total; i++) ...
- 【已解决】java.lang.IllegalStateException:在提交响应后无法转发
出现这个问题的根本原因在于这一行代码: 解决办法就是把super这一行代码删掉. 这一行代码简单理解就是:HTTPServlet的doPost方法的默认实现返回HTTP 405状态码. 父类HttpS ...
- .NET Emit 入门教程:第六部分:IL 指令:3:详解 ILGenerator 指令方法:参数加载指令
前言: 在上一篇中,我们介绍了 ILGenerator 辅助方法. 本篇,将详细介绍指令方法,并详细介绍指令的相关用法. 在接下来的教程,关于IL指令部分,会将指令分为以下几个分类进行讲解: 1.参数 ...
- #高精度,模拟,vector#C 前缀
From 2020牛客NOIP赛前集训营-提高组(第二场) 传送门 分析 像我这么菜就只会模拟呀(考场CE全部爆零QWQ) 题意就是不断跳到下一个字母问总共跳的长度有多长, 首先用一个变量存下初始位置 ...