在这篇博客"ORACLE当中自定义函数性优化浅析"中,我们介绍了通过标量子查询缓存来优化函数性能: 标量子查询缓存(scalar subquery caching)会通过缓存结果减少SQL对函数(Function)的调用次数, ORACLE会在内存中构建一个哈希表来缓存标量子查询的结果. 那么SQL Server的优化器是否也会有类似这样的功能呢? 抱着这样的疑问,动手测试了一下,准备测试环境 CREATE TABLE TEST (    ID  INT );     DECLARE…
待优化语句如下 select a.code as code, a.m_code as m_code,a.stktype as f_stype,a.e_year as e_year, b.sname as sname,a.c_date as c_date,to_char(sysdate,'YYYYMMDD') as createtime, to_char(sysdate,'YYYYMMDD') as updatetime, (,'YYYYMMDD') and a.c_date and t.e_ye…
数据库环境:SQL SERVER 2008R2 今天在数据库中抓出一条比较耗费资源的SQL,只返回904条数据,居然跑了40多分钟.SQL及对应的数据量如下图: SELECT saft04.cur_year , ) sdept_id , saft04.vdept_id , saft04.dept_id , saft04.fee_id , saft04.vitem_id , ) AS saft04_fee_amt , ) AS saft04_fee_qty , ) AS saft04_fee_am…
项目数据库集群出现了大规模节点宕机问题.经查询,问题在于几张表被锁.主要问题在于近期得几个项目在数据库SQL编写时大量使用了标量子查询. 为确定为题确实是由于数据表访问量超过单节点限制,做了一些测试. 数据库集群环境为:Gbase 8a 资料查询情况总结如下: 标量子查询是一个非常恐怖的用法. 当外部表返回的数据量不大时,完全不会引起性能问题.但是此时隐患已经埋下随着外部表数据量的增加,标量的性能会慢慢受到影响,一旦过了这个临界值. 性能下降的非常明显和可怕.所以在数据仓库中应该用外连接代替标量…
Oracle SQL高级编程--分析函数(窗口函数)全面讲解 注:本文来源于:<Oracle SQL高级编程--分析函数(窗口函数)全面讲解> 概述 分析函数是以一定的方法在一个与当前行相关的结果子集中进行计算,也称为窗口函数.一般结构为 Function(arg1 , arg2 --) over(partition by clause order by clause windowing clause ) Windowing clause : rows | range between star…
oracle标量子查询和自己定义函数有时用起来比較方便,并且开发者也常常使用.数据量小还无所谓.数据量大,往往存在性能问题. 下面測试帮助大家彻底搞懂标量子查询. SQL> create table a (id int,name varchar2(10)); Table created. SQL> create table b (id int,name varchar2(10)); Table created. SQL> insert into a values (1,'a1'); 1…
一网友说下面sql跑的好慢,让我看看 sql代码: select er, cid, pid, tbl, zs, sy, (select count(sr.mobile_tele_no) from tbl_sp_sales_records sr where sr.task_id = tid and sr.channel_id = cid and sr.is_conn = '1' and sr.sales_time >='2017-10-01 00:00:00' and sr.sales_time…
fxnjbmhkk4pp4 select /*+ leading (wb,sb,qw) */ 'blocker('||wb.holding_session||':'||sb.username||')-sql:'||qb.sql_text blockers,'waiter ('||wb.waiting_session||':'||sw.username||')-sql:'||qw.sql_text waiters from dba_waiters wb, v$session sb, v$sessi…
[20180626]函数与标量子查询14.txt --//前面看http://www.cnblogs.com/kerrycode/p/9099507.html链接,里面提到: 通俗来将,当使用标量子查询的时候,ORACLE会将子查询结果缓存在哈希表中, 如果后续的记录出现同样的值,优化器通过缓存在哈希表中的值,判断重复值不用重复调用函数,直接使用上次计算结果即可.从而减少调用函数次数,从而达到优化性能的效果.另外在ORACLE 10和11中, 哈希表只包含了255个Buckets,也就是说它能存…
这个月碰到几个人问我关于"SQL SERVER中INNER JOIN 与 IN两种写法的性能孰优孰劣?"这个问题.其实这个概括起来就是SQL Server中INNER JOIN与子查询孰优孰劣(IN是子查询的实现方式之一,本篇还是只对比INNER JOIN与子查询IN的性能,如果展开INNER JOIN与子查询性能对比,范围太大了,没法一一详述).下面这篇文章,我们就INNER JOIN与子查询IN这两种写法孰优孰劣,在不同场景下进行一下测试对比一下,希望能解答你心中的疑惑. 下面例子…
SQL> --查询工资比SCOTT高的员工信息 SQL> --1. SCOTT的工资 SQL> select sal from emp where ename='SCOTT'; SAL ---------- 3000 SQL> --2. 查询比3000高的员工 SQL> select * from emp where sal >3000; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ----------…
概述 子查询的概念: 当一个查询是另一个查询的条件时,称之为子查询.子查询可以嵌套在主查询中所有位置,包括SELECT.FROM.WHERE.GROUP BY.HAVING.ORDER BY. 外面的查询成为父查询,圆括号嵌入的查询成为称为子查询.SQL  Server  执行时,先执行子查询部分,求出子查询部分的值,再执行整个父查询,返回最后的结果. 查看多表的数据也可使用表连接,表连接(join   on...),表连接都可用子查询替换,但有的子查询不能用表连接替换,子查询比较灵活,方便,形…
发现了一种表连接新的写法,以前还没有这样写过或者见别人写过.跟同学聊天他们公司却很多人这样写,看来真的要学学sql了 表 CREATE TABLE `t_book` ( `FId` ) NOT NULL, `FName` ) DEFAULT NULL, `FYearPublished` ) DEFAULT NULL, `FCategoryId` ) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- --------------------…
标量子查询不仅可以用在SELECT 语句的列表中,它还可以用在WHERE 子句中,而且实际应用中子查询很多的时候都是用在WHERE子句中的. 先来看一个简单的例子,我们要检索喜欢“Story”的读者主键列表,那么这可以使用连接来完成,不过这里我们将使用子查询来完成. 使用子查询的实现思路也比使用连接简单.首先肯定要到T_Category 表中查找FName等于“Story”的记录的FId字段值: SELECT FId FROM T_Category WHERE FName=" Story &qu…
一.MySQL 子查询 子查询是将一个 SELECT 语句的查询结果作为中间结果,供另一个 SQL 语句调用.MySQL 支持 SQL 标准要求的所有子查询格式和操作,也扩展了特有的几种特性.子查询没有固定的语法,一个子查询的例子如下: SELECT * FROM article WHERE uid IN (SELECT uid FROM user WHERE status=1)//取status=1时的uid子集 对应的两个数据表如下: article 文章表: user 用户表:   查询返…
为什么sql里面not in后面的子查询如果有记录为NULL的,主查询就查不到记录???原因很简单: SELECT * FROM dbo.TableA AS a WHERE a.id NOT IN ( 2, NULL ) –等同于: SELECT * FROM Table_A AS a WHERE a.id <> 2 AND a.ID <> NULL 由于NULL值不能参与比较运算符,导致条件不成立,查询不出来数据. 转载:https://blog.csdn.net/coder_o…
最外层查询的结果集会返回给调用者,称为外部查询.内部查询的结果是供外部查询使用的,也称为子查询.子查询可以分成独立子查询和相关子查询两类.独立子查询不依赖于它所属的外部查询,而相关子查询则须依赖它所属的外部查询.子查询的期望值可以是单值的.多值的或以表为值. 1.独立子查询 独立子查询是独立于其外部查询的子查询.在逻辑上,独立子查询在执行外部查询之前只要先执行一次,接着外部查询再使用子查询的结果继续进行查询. 1.1 独立标量子查询 标量子查询是返回单个值的子查询,标量子查询可以出现在外部查询中…
碰到标量子查询中有ROWNUM=1怎么改? select to_date(o.postdate,'yyyymmdd'), (select cur.c_code from cur_tbl cur where cur.c_abbr=o.currencycode) as CusNo, o.dramount, round(o.dramount * (select s.exechangerate / 100 from tcsa.uccexchange s where s.exchangecurrency…
原文:在论坛中出现的比较难的sql问题:32(row_number函数+子查询 sql循环取差值) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. sql循环取差值,该怎么写? http://bbs.csdn.net/topics/390636438?page=1#post-396012416 现在有一组 条件 和 一个 数字(比如是10) 根据条件可以查出若干条数据 ,比如是这么样子的 ID Num NumOut 1   4    0 2   5    0 3  …
原文:在论坛中出现的比较难的sql问题:31(row_number函数+子查询 月环比计算) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.…
原文:在论坛中出现的比较难的sql问题:4(row_number函数+子查询 分组连续编号问题) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. 求一查询语句 http://bbs.csdn.net/topics/390633004 CREATE #temp (cName CHAR(1),re int) INSERT #temp SELECT 'A',1 UNION ALL SELECT 'A',2 UNION ALL SELECT 'B',3 UNION ALL…
原文:在论坛中出现的比较难的sql问题:2(row_number函数+子查询) 2.如何去掉字段内的重复.…
ORACLE10G以后版本的SQL Tuning advisor可以从以下四个方面给出优化方案 (1)为统计信息丢失或失效的对象收集统计信息   (2)考虑优化器的任何数据偏差.复杂谓词或失效的统计信息   (3)重新构建 SQL 以优化性能   (4)提出新索引建议 下面来实际测试: 1.为SQL_id创建一个STA(SQL Tuning advisor)分析任务(使用SYS用户执行) SQL> variable task_li_test varchar2(2000); SQL>exec :…
数据库环境:SQL SERVER 2005 有一博彩的赔率是1:20,它有2张业务表:smuchs(投注表),lottery(开奖表). smuchs表有3个字段,分别是sno(投注号码).smuch(投注金额),stime(投注时间), lottery表有2个字段,分别是lno(开奖号码).stime(开奖时间).smuchs表和lottery表的数据如下:       要求:根据每天的投注情况和开奖号码,统计指定日期的投注金额.中奖应支付金额.盈亏金额. 1.建表,导入模拟数据 CREATE…
主键 数据库主键是指表中一个列或列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键,通过它可强制表的实体完整性.当创建或更改表时可通过定义 PRIMARY KEY约束来创建主键.一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值.由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列. 主键的作用 主键的主要作用如下: (1)保证实体的完整性: (2)加快数据库的操作速度: (3) 在表中添加新记录时,数据库会自…
主键 数据库主键是指表中一个列或列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键,通过它可强制表的实体完整性.当创建或更改表时可通过定义 PRIMARY KEY约束来创建主键.一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值.由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列. 主键的作用 主键的主要作用如下: (1)保证实体的完整性: (2)加快数据库的操作速度: (3) 在表中添加新记录时,数据库会自…
修改表 修改表 语法: Alter table <旧表名> rename [ TO] <新表名>; 例子:Alter table `demo01` rename `demo02`; 添加字段 语法: Alter Table 表名 ADD 字段名  数据类型  [属性]; 例子:Alter Table `Demo02` ADD `passWord`  varchar(50) not null; 修改字段 语法: Alter table 表名 change  原字段名  新字段名  数…
一.分组 建表及数据填充语句下载:链接: https://pan.baidu.com/s/1WHYafwqKJEKq1kDwCH_Zlg 提取码: 3wy4 1.1初识分组 分组是按照某一列,将该列中相同多个相同的数据作为一组,整体分成若干组. 例如有如下表: 例如将vend_id作为依据分组,则会分成三组. 所有vend_id = DLL01为一组,所有vend_id = BRS01为一组. 所有vend_id = FNG01为一组. 现在我们有这样一个需求,计算每一个每一个供应商有多少商品.…
一.为什么会使用子查询 虽然可以通过连接查询来实现多表查询数据记录,但不建议使用,因为连接查询的性能很差,为什么呢?我们来进行分析,例如 我们要查询部门表t_dept 和雇员表t_employee中的数据记录,一般可能会写成: SELECT * FROM t_dept t1,t_employee t2 WHERE t1.deptno=t2.deptno; 对于这条SQL语句,在数据库执行的时候,会先对两个表进行笛卡尔积操作,然后再选取符合条件 t1.deptno=t2.deptno的数据记录.由…
? 1 **SQL多表连查** ? 1 2 3 4 5 6 7 8 --查询员工和部门信息 select * from emp e,dept d where e.deptno=d.deptno --查询员工姓名,部门名称 select e.ename,d.dname from emp e,dept d where e.deptno = d.deptno --查询所有员工姓名,部门名称 select e.*, d.dname from emp e,dept d where e.deptno=d.d…