首页 > 数据库 >教你使用常用的逻辑公式和恒等式等价改写SQL

教你使用常用的逻辑公式和恒等式等价改写SQL

时间:2023-08-17 17:01:20浏览次数:32  
标签:t2 t1 改写 恒等式 orgid SQL ORGID SELECT

今天同事给我一条2秒的SQL看看能不能优化。

原始SQL:

SELECT pk_dept
FROM aaaa
WHERE 1 = 1
  AND ((pk_group = '0001A110000000000JQ6' AND pk_org IN ('0001A110000000001M09')))
  AND (PK_DEPT IN (SELECT t1.ORGID
                   FROM xxxxx t1
                            INNER JOIN (SELECT (CASE WHEN ORGID3 IS NULL THEN ORGID2 ELSE ORGID3 END) orgid
                                        FROM xxxxx
                                        WHERE ORGID = '1001A110000000001U8S') t2
                                       ON t1.ORGID2 = t2.orgid OR t1.ORGID3 = t2.orgid))
  AND (enablestate IN (2))
ORDER BY code;
4 loops=1)
                                                                                                               Heap Fetches: 0
 Planning Time: 258.024 ms
 Execution Time: 2493.882 ms
(1583 rows)

xxxxx   表是一张非常复杂的视图,上面SQL执行计划大概2千行左右,所以本案例就不放整体的计划了。

如果经常做优化的同学对于简单的SQL,相信可以使用瞪眼大法基本定位到语句慢的位置

标签:t2,t1,改写,恒等式,orgid,SQL,ORGID,SELECT
From: https://www.cnblogs.com/yuzhijian/p/17638128.html

相关文章

  • mysql数据库DeadLock处理分析
    1.问题复现数据库新建一个test表,里面包含id,和name字段然后分别开两个窗口,分别开启事务,然后updatename字段,不提交,然后查看一下三个表,看是否出现锁表情况innodb_trx        ##当前运行的所有事务innodb_locks     ##当前出现的锁innodb_lock_waits......
  • python3 安装clickhouse_sqlalchemy(greenlet) 失败
    环境信息:centos7操作系统,python3.8执行pip3installclickhouse_sqlalchemy或者pip3installgreenlet报以下报错:Command"/opt/python3.6.10-customized/bin/python3.6-u-c"importsetuptools,tokenize;file='/tmp/pip-install-wbyi43ip/greenlet/setup.py';f=g......
  • MYSQL与Hive配置的相关步骤
    1、配置元数据到MYSQL1、新建Hive元数据库登录Mysql:mysql-uroot-p//不加分号创建Hive元数据库:createdatabasemetastore;退出mysql:2、将mysql的jdbc驱动拷贝到hive的lib目录下3、在hive的conf目录下新建hive-site.xml文件vihive-site.xml进入到文件编写模......
  • Mysql分表后同结构不同名称表之间复制数据以及Update语句只更新日期加减不更改时间
    场景SpringBoot+Mybatis+定时任务实现大数据量数据分表记录和查询:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/126225846通过以上分表实现的同结构不同表名之间的表,如何将一个表中的数据复制到另一个表中,且将日期字段进行同样的新增,时间字段不变。注:博客:ht......
  • 在SQL Server中创建一个新用户并授予他们查询对象的权限
    在SQLServer中创建一个新用户并授予他们查询对象的权限,您可以按照以下步骤操作:使用具有创建新用户和授予权限所需权限的特权帐户连接到SQLServer实例。使用CREATELOGIN语句为用户创建新的登录。以下是一个示例:CREATELOGIN[new_user]WITHPASSWORD='password';将new......
  • PostgreSQL-log函数的用法
    最近在看关于PostgreSQL内部原理的一些东西,并借助翻译软件,做一些翻译,整理成文档,以便自己能够快速理解的同时,加以记录。在单表查询的开销估算中,关于索引扫描的启动开销,有一个等式,使用到了函数ceil和log2。等式是这样写的:'start-upcost'={ceil(log2(10000))+(1+1)*50}*0.0025=......
  • IDEA社区版+SpringBoot+MyBatisPLus+MySQL实现数据库的保存、查询、修改操作
    一、概述使用IDEA社区+SpringBoot+MyBatisPlus+MySQL实现数据的保存修改与查询。主要记录一下踩坑过程。注意事项:1.社区版IDEA并不能直接创建SpringBoot工程,所以我采用的方式是在Spring官网上,让其帮助我创建一个,创建好后,直接下载。//参考案例https://blog.csd......
  • 使用NineData实现亿级别MySQL大表迁移
    MySQL作为当前应用最广泛的开源关系型数据库之一,具有高性能、稳定性和易用性等特性,是许多网站、应用和商业产品的主要数据存储。在一些场景中,如果出现单表行数上亿的情况,就可能需要开发和DBA对大表进行优化:分表、归档或扩容操作,而在这些操作中都涉及了对数据的迁移。所以,提供高......
  • PLSQL:DBMS_XMLPARSER包
    使用==DBMS_XMLPARSER==,你可以访问XML文档的内容和结构。它描述了处理XML文件的计算机程序的行为。在结构上看,XML文档和SGML文档是一样的。XML文档是由称为==实体==的存储单元组成的,实体中包含解析的和未被解析的数据。解析后的数据由字符串组成,其中一些代表字符数据,一些代表标记......
  • docker mysql
    dockerpullmysql:8.0.16------------------------------------------------------------------------------------------------------------------------------------------------dockerrun\-p3306:3306\-eMYSQL_ROOT_PASSWORD=123456\-v/home/dock......