数据库中的WITH temp_a 类似临时表的使用-CTE表达式
个人随笔记录
当一个表的数据量过大时,在字段没有索引的情况下,查询的效率通常都会比较慢,如何能在不改变当前表结构的情况下让查询效率提升呢?
在一次偶然的巧合中看见同事使用了一个未见过语句,后面通过百度其语法的使用发现非常好玩的事情。
于是在一次工作中,有个领导突然提出一个需求,需要统计一个两个月内的开立了某个项目的相关信息,该项目名称没有全称,只有模糊字眼,但好彩的是知道这个项目属于哪个类别,并且该表中有这个类别字段。
由于该数据表每天的都有大量的数据产生,两个月该类别的数据就有21万。
光查询统计数据就用了2分钟。

于是我开始用普通语法进行模糊查询

模糊搜索查询了67秒,后面我转而一想,这样的执行顺序是
1、先从整表里取到8-9月的数据
2、然后再去过滤ITEM_CLASS等于C类的
3、再去模糊查询项目名称DRUG_NAME
这样一顿操作下来,感觉条件越多并且加上模糊查询效率是不是就降下来了。
刚好学习了临时表的使用,于是我就有个大胆的想法,为什么不先把,范围内的数据先存到临时表,再用条件去过滤临时表中的数据,这样的话是不是可以查询更快点。
于是开始实践
--创建临时表
WITH temp_a as(
SELECT *
FROM O*** A
WHERE A.OPER_DATE>=to_date('2024-08-10 00:00:00','yyyy-mm-dd hh24:mi:ss')
And A.OPER_DATE<=to_date('2024-09-08 23:59:59','yyyy-mm-dd hh24:mi:ss')
And ITEM_CLASS='C'
)
--查询临时表,查询语句需要跟着上面的临时表后面
SELECT * from temp_a K Where K.DRUG_NAME Like'%沙眼衣原体%' ;

发现确实快了很多,虽然具体的原理我没弄明白(大佬求解答),但是我的猜想确实是验证了,我个人的理解是如果是不先写入临时表查的话,就会走全表查询,单一个表的量级过大,查询的效率也会随之降低。但是如果先把范围数据先写入临时表,再通过条件是查询临时表的话,就属于精准取数,检索的数据就会减少,所以可以提升查询的数据。
当然以上那个也是个人的猜想,具体的底层原理还不了解,不过可以肯定的是这个语句真的挺好用的。特别是在处理复杂查询时,它通过分解查询、提高可读性,通过使用 CTE,可以将每个逻辑步骤分离出来,使得查询结构清晰。
数据库中的WITH temp_a 类似临时表的使用-CTE表达式的更多相关文章
- oracle数据库中创建表空间和临时表空间,以及用户和密码以及设置密码永不过期
首先进入oracle用户,命令是: su - oracle sqlplus /nolog connect system/123456@ora11g 或者 [oracle@localhost ~]$ ...
- SQL数据库中临时表、临时变量和WITH AS关键词创建“临时表”的区别
原文链接:https://www.cnblogs.com/zhaowei303/articles/4204805.html SQL数据库中数据处理时,有时候需要建立临时表,将查询后的结果集放到临时表中 ...
- Sqlserver数据库中的临时表详解
临时表在Sqlserver数据库中,是非常重要的,下面就详细介绍SQL数据库中临时表的特点及其使用,仅供参考. 临时表与永久表相似,但临时表存储在tempdb中,当不再使用时会自动删除.临时表有两种类 ...
- C#关于数据库中存储的用户权限类似 "普通员工,管理员" 如何在代码中读取分析权限
之前在看某些数据库的用户权限的表时,发现字段是这样类似这样存储的" 普通员工,管理员 ",当时觉得他们是通过分割字符串来分析权限的.后来读到 Liam Wang 的 https ...
- Eclipse中java向数据库中添加数据,更新数据,删除数据
前面详细写过如何连接数据库的具体操作,下面介绍向数据库中添加数据. 注意事项:如果参考下面代码,需要 改包名,数据库名,数据库账号,密码,和数据表(数据表里面的信息) package com.ning ...
- 涂抹mysql笔记-数据库中的权限体系
涂抹mysql笔记-数据库中的权限体系<>能不能连接,主机名是否匹配.登陆使用的用户名和密码是否正确.mysql验证用户需要检查3项值:用户名.密码和主机来源(user.password. ...
- 在SQL2008查找某数据库中的列是否存在某个值
在SQL2008查找某数据库中的列是否存在某个值 --SQL2008查找某数据库中的列是否存在某个值 create proc spFind_Column_In_DB ( @type int,--类型: ...
- 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...
- SQL Server 在多个数据库中创建同一个存储过程(Create Same Stored Procedure in All Databases)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 遇到的问题(Problems) 实现代码(SQL Codes) 方法一:拼接SQL: 方法二: ...
- 分布式数据库中的Paxos 算法
分布式数据库中的Paxos 算法 http://baike.baidu.com/link?url=ChmfvtXRZQl7X1VmRU6ypsmZ4b4MbQX1pelw_VenRLnFpq7rMvY ...
随机推荐
- mvn eclipse:eclipse -Dwtpversion=2.0 -DdownloadSources=true -DdownloadJavadocs=true -DjdkLevel=1.6
mvn eclipse:eclipse -Dwtpversion=2.0 -DdownloadSources=true -DdownloadJavadocs=true -DjdkLevel=1.6
- AbstractQueuedSynchronizer源码解析之ReentrantLock(一)
在上一篇笔记中提到concurrent包中semaphores, barriers, and latches等Synchronizer的介绍和使用,于是想深入的了解这些Synchronizer的原理和 ...
- PHP中的特殊用法
开发中查阅别人代码的时候, 总能发现新大陆, 各种骚操作与奇技淫巧, 有些还是值得借鉴的,自然要学习一番啦 1.fastcgi_finish_request 此函数冲刷(flush)所有响应的数据给客 ...
- Filter内存马
概述 最近感冒了,不想BB太多,直接开始调试吧,先写个Filter来调试 Filter代码 新建一个FilterShell类,代码如下: 一个类如果想要成为Filter则需要继承Filter,然后重写 ...
- Java设计模式——适配器模式的精妙应用:探秘 JDK 源码中的 Set 类
在 Java 编程的世界里,JDK 源码犹如一座神秘的宝藏,其中的 Set 类更是我们日常开发中频繁使用的利器.今天,就让我们像勇敢的探险家一样,深入 JDK 源码,揭开 Set 类的神秘面纱,重点剖 ...
- 服务迁移之《tomcat性能优化》
删除无用的connector,因为一般的tomcat前面都会挂有nginx服务 增加connnector使用的线程池的数量 删除没有用的listener host优化项:autoDeploy设置为fa ...
- 渗透测试-前端加密分析之AES
前言 本文是高级前端加解密与验签实战的第3篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过前端 AES(CBC) 和 AES(ECB) 加密. 因为编写Yakit热 ...
- [solon]Solon开发实战之权限认证
本项目采用权限认证框架sa-token(sa-token-solon-plugin) pom.xml <!-- 鉴权--> <dependency> <groupId&g ...
- idea中terminal的配置
idea中terminal的配置流程: File->settings->Tools->terminal 然后根据需要进行配置: 显示git操作界面 Shell path ==> ...
- grpc与http2的关系
https://nullget.sourceforge.io/?q=node/895 grpc与http2的关系 grpc client 发送包到原生的http2 server client收到报错: ...