精华内容
下载资源
问答
  • 主要问题在于近期得几个项目在数据库SQL编写时大量使用了标量子查询。 为确定为题确实是由于数据表访问量超过单节点限制,做了一些测试。  数据库集群环境为:Gbase 8a 资料查询情况总结如下:  标量子查询是...

      项目数据库集群出现了大规模节点宕机问题。经查询,问题在于几张表被锁。主要问题在于近期得几个项目在数据库SQL编写时大量使用了标量子查询。

    为确定为题确实是由于数据表访问量超过单节点限制,做了一些测试。

     


       数据库集群环境为:Gbase 8a


     

    资料查询情况总结如下:

      标量子查询是一个非常恐怖的用法。

      当外部表返回的数据量不大时,完全不会引起性能问题。但是此时隐患已经埋下随着外部表数据量的增加,标量的性能会慢慢受到影响,一旦过了这个临界值。

      性能下降的非常明显和可怕。所以在数据仓库中应该用外连接代替标量,避免给程序埋下隐患。

    主要隐患:

      1、外部表有多少条不重复的数据(可能是唯一主键、可能是唯一索引,主要看标查询和外部查询的条件),子查询就会被执行多少次。

                 关联字段为唯一主键,没有重复值,那么外部表返回多少行,子查询表(内不表)就要被执行多少次。

              关联字段的distinct值只有n个,那子查询表只执行n次。

           2、执行效率低,执行失败。

       3、导致数据库被锁表、数据库节点宕机。

     


      具体问题及验证

    展开全文
  • 标量子查询

    千次阅读 2013-05-26 15:47:23
    当使用另一个select语句来产生结果中的一列的值的时候,这个查询必须只能返回一行一列的值,这种类型的子查询成为标量子查询 标量子查询在结果集中的每一行结果产生时都要执行一遍,在某些情况下可以进行优化以减少...

    当使用另一个select语句来产生结果中的一列的值的时候,这个查询必须只能返回一行一列的值,这种类型的子查询成为标量子查询
    标量子查询在结果集中的每一行结果产生时都要执行一遍,在某些情况下可以进行优化以减少标量子查询才重复执行,标量子查询是很耗性能的注意使用

    select c.customer_id,c.cust_first_name||''||c.cust_last_name,

    (select e.last_name from hr.employees e where e.employee_id=c.account_mgr_id)

    from oe.customers c

    展开全文
  • sql 标量子查询

    千次阅读 2015-03-02 18:19:59
    返回结果只有一行的查询叫标量子查询. SELECT shohin_mei shohin_bunrui FROM Shohin WHERE hanbai_tanka > (SELECT AVG(hanbai_tanka) FROM Shohin); 标量子查询可以和列一样 mysql> SELECT shohin_id...

    返回结果只有一行的查询叫标量子查询.

    SELECT shohin_mei shohin_bunrui FROM Shohin WHERE hanbai_tanka > (SELECT AVG(hanbai_tanka) FROM Shohin);

    标量子查询可以和列一样

    mysql> SELECT shohin_id ,shohin_mei,shohin_bunrui,\

        -> (SELECT AVG(hanbai_tanka) FROM Shohin) AS avg_tanka\

        -> FROM Shohin;

    展开全文
  • 如果子查询返回 0 行,则标量子查询表达式的值为 NULL。如果子查询返回多行,则报错。 可以在大多数要求表达式 (expr) 的语法中使用标量子查询表达式。在所有情况下,标量子查询必须包含在其自己的括号中,即使其...

    目录

     

    定义


    定义

     

    标量子查询是一个子查询,它只从一行中返回一个列值。标量子查询表达式的值是子查询的可选列表项的值。如果子查询返回 0 行,则标量子查询表达式的值为 NULL。如果子查询返回多行,则报错。

    可以在大多数要求表达式 (expr) 的语法中使用标量子查询表达式。在所有情况下,标量子查询必须包含在其自己的括号中,即使其句法位置已将其定位在括号内(例如,当标量子查询用作内置函数的参数时)。

     

    他不能用在如下条件中:

    不能作为列的默认值

    不能作为cluster的哈希表达式

    不能用在 DML 语句的返回子句中

    不能作为基于函数的索引的基础

    不能用在check约束中


    在scott用户中查询员工(emp)和部门(dept)的总数

    SQL> select (select count(*) from emp) 员工总数,(select count(*) from dept) 部门总数 from dual;
     
     
    员工总数   部门总数
    ---------- ----------
            14          4

    查询每位员工的主管名字

    SQL>

    select e.ename||q'[的主管是]'||m.ename

    from emp e,(

    select empno,ename,job from emp) m

    where e.mgr=m.empno;
     
    E.ENAME||Q
    '[的主管是]'||M.ENAME
    -----------------------------------------------------------
    FORD的主管是JONES
    SCOTT
    的主管是JONES
    TURNER
    的主管是BLAKE
    ALLEN
    的主管是BLAKE
    WARD
    的主管是BLAKE
    JAMES
    的主管是BLAKE
    MARTIN
    的主管是BLAKE
    MILLER
    的主管是CLARK
    ADAMS
    的主管是SCOTT
    BLAKE
    的主管是KING
    JONES
    的主管是KING
    CLARK
    的主管是KING
    SMITH
    的主管是FORD
     

    13 rows selected.

    当然也可以用自连接的方式自连接:SELF JOIN

    SQL>

    select e.ename||q'[的主管是]'||m.ename

    from emp e,emp m

    where e.mgr=m.empno;
     
    E.ENAME||Q
    '[的主管是]'||M.ENAME
    -----------------------------------------------------------
    FORD的主管是JONES
    SCOTT
    的主管是JONES
    TURNER
    的主管是BLAKE
    ALLEN
    的主管是BLAKE
    WARD
    的主管是BLAKE
    JAMES
    的主管是BLAKE
    MARTIN
    的主管是BLAKE
    MILLER
    的主管是CLARK
    ADAMS
    的主管是SCOTT
    BLAKE
    的主管是KING
    JONES
    的主管是KING
    CLARK
    的主管是KING
    SMITH
    的主管是FORD
     

    13 rows selected.

     

    查询所有部门的名称,地点,员工数和平均工资

    SQL>

    select dname,loc,empcount,avg_sal

    from

    (select deptno,count(deptno) empcount,avg(sal) avg_sal from emp group by deptno) e,

    (select deptno,dname,loc from dept) d

    where e.deptno=d.deptno;
     
    DNAME           LOC               EMPCOUNT    AVG_SAL

    --------------- --------------- ---------- ----------
    ACCOUNTING      TJ CHINA                 3 2916.66667
    RESEARCH        DALLAS                   5       2175
    SALES           CHICAGO                  6 1566.66667

    也可用普通子查询来解决

    SQL>

    select d.dname,d.loc,e.empcount,e.avg_sal

    from (

    select deptno,count(deptno) empcount ,avg(sal) avg_sal from emp group by deptno) e

    ,dept d

    where e.deptno=d.deptno;
     
    DNAME           LOC               EMPCOUNT    AVG_SAL

    --------------- --------------- ---------- ----------
    ACCOUNTING      TJ CHINA                 3 2916.66667
    RESEARCH        DALLAS                   5       2175
    SALES           CHICAGO                  6 1566.66667

     

    查询工资比SCOTT高的员工是谁

    SQL>

    select ename from emp

    where sal>(

    select sal from emp where ename='SCOTT'

    );
     
    ENAME

    -------
    KING

     

    展开全文
  • 本帖最后由 youthparabalic 于 ...在此也做个总结1、最简单的标量自查询2、子查询可能返回多行的限定子查询3、子查询带有聚集函数4、一个查询里面同时有好几个标量子查询,每个标量子查询的关联表,关联条件可能都...
  • --标量子查询select e.empno, e.ename, e.sal, e.deptno,(select d.dname from dept d where e.deptno = d.deptno)as dnamefrom emp e--插入一条数据insert into emp(empno,deptno) values(9999,null)--返回结果15条...
  • 一个标量子查询是一个放在圆括弧里的普通 SELECT查询, 它只返回只有一个字段的一行.(参阅 Chapter 4 获取有关写查询的信息。) 该 SELECT 将被执行, 而其单个返回值将在周围的值表达式中使用. 把一个返回超过一...
  • 首先,来理解一下标量子查询:处于select之后from之前的子查询称为...当然定义为返回单列的选择语句,或者返回一行的表达式的子查询称为标量子查询标量子查询的缺点十分明显:驱动表固定是外表t1, t1返回的...
  • 标量子查询(二)

    2014-01-16 09:50:31
    标量子查询要避免单行子查询返回多行 点击(此处)折叠或打开 DROP TABLE t1; DROP TABLE t2...
  • 1、子查询是相对于主(父)查询而言的。只要其不是处于最外层的查询,都称之为子查询。 2、根据子查询出现的位置不同,我们也会...3、标量子查询专指只返回一行一列的子查询。其通常出现在主查询的select 后面。但出现
  • 1.子查询子查询:SQL语句允许将一个查询语句做为一个结果集供其他SQL语句使用,就像使用普通...子查询分标量子查询、表子查询。标量子查询:子查询的返回值必须只有一行记录,而且只能有一个列。可以用在select语句...
  • 标量子查询优化 当使用另外一个SELECT 语句来产生结果中的一列的值的时候,这个查询必须只能返回一行一列的值。这种类型的子查询被称为标量子查询 在某些情况下可以进行优化以减少标量子查询的重复执行,但更...
  • MySQL 子查询 子查询是将一个 SELECT 语句的查询结果作为中间结果,供另一个 SQL 语句调用。...查询返回结果如下所示: 在该例子中,首先通过子查询语句查询出所有 status=1 的 uid,实际的查询类似于: SELECT
  • 聚合标量子查询,是标量子查询的升级版,因为不是简单的返回一个字段,而是要对字段求 sum,avg等,也就是标量子查询+聚合函数。 但是这种写法,本质上还是标量子查询的写法,所以效率不高,建议改为left join方式...
  • 标量子查询:可以当做是select列表中的一个列,唯一约束条件是子查询的返回值必须只有一行记录,且只能有一个列。但并不是只能返回唯一的值,它可以随当前查询记录而变化。如: SELECT FId,FName,(SELECT MAX...
  • 在主查询返回大量结果集的情况下,标量子查询(Scalar Subquery)的性能是非常差的,而且即使使用并行也不行,这种情况一般需要根据SQL本身的逻辑进行改写,一般可以改写为外关联的方式。部分标量子查询还可以直接...
  • 带top的标量子查询,是在标量子查询中,加上了top 1,因为如果不加top 1,关联后可能返回超过1条数据,就导致sql报错了。 但是加了top 1,又没有排序,比如:去最早的一条,或者最晚的一条。 这种写法,在语义...
  • 单列子查询,又叫标量子查询。标量(Scalar subquery)是只返回一个值的查询:一行一列。
  • MySQL 标量子查询

    2013-08-20 08:46:00
    标量子查询是指子查询返回的是单一值的标量,如一个数字或一个字符串,也是子查询中最简单的返回形式。 一个标量子查询的例子如下: SELECT * FROM article WHERE uid = (SELECT uid FROM user WHERE status=1 ...
  • 今天在数据库中抓出一条比较耗费资源的SQL,只返回904条数据,居然跑了40多分钟。SQL及对应的数据量如下图: SELECT saft04.cur_year , LEFT(saft04.dept_id, 4) sdept_id , saft04.vdept_id , saft04.de.....
  • 本系列文章导航[Oracle]高效的PL/SQL程序设计(一)--伪列ROWNUM使用技巧[Oracle]高效的PL/SQL程序设计(二)--标量子查询[Oracle]高效的PL/SQL程序设计(三)--Package的优点[Oracle]高效的PL/SQL程序设计(四)--批量处理...
  • 转载:相关子查询 与非相关子...只有标量子查询返回的是单个记录或者不返回,就是有效的子查询。 Ex1:selectOrderIdFromOrderswhereEmployeeId= (selectEmployeeIdFromemployeeswherelastNamelikeN'Davolio') ...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 185
精华内容 74
关键字:

标量子查询返回