zoukankan      html  css  js  c++  java
  • postgresql关于in和exists使用

    1.当父查询结果集小于子查询结果集则选择exists,如果父查询结果集大于子查询结果集选择in。(可尝试等价改写)
    in和exists都有子查询优化,提升子查询,有时候这两的执行计划一样。需要注意的是如果子查询包含了父查询里面的条件,in不会被优化。

    2.in里面的值一般不超过100个
    3.单表abase的in和个数关系不大,都可以走索引。
    4.当有连表并且有in的个数很多,count的时候需要解析这些值很慢,所以可以封装成any valuse的形式来求count,而分页还是使用in。此例主要是in和any(values)的等价改写
    any values:c_bh=any(values('53'),('530001'),('530002'),...)

    abase在查询的时候会自动做表连接。将两张表做hash join操作:
    1.EXPLAIN SELECT * FROM X WHERE x_num IN(SELECT y_num FROM y);
    2. QUERY PLAN
    3.----------------------------------------------------------------------
    4. Hash Join (cost=23.25..49.88 rows=350 width=86)
    5. Hash Cond: (x.x_num = y.y_num)
    6. -> Seq Scan on x (cost=0.00..17.00 rows=700 width=86)
    7. -> Hash (cost=20.75..20.75 rows=200 width=4)
    8. -> HashAggregate (cost=18.75..20.75 rows=200 width=4)
    -> Seq Scan on y (cost=0.00..17.00 rows=700 width=4)

  • 相关阅读:
    Spring中文文档
    学装饰器之前必须要了解的四点
    三元运算符
    functools 中的 reduce 函数基本写法
    filter 函数基本写法
    map 函数基本写法
    迭代器和可迭代对象区别
    斐波那契数列进一步讨论性能
    无论传入什么数据都转换为列表
    将每一个分隔开的字符的首字母大写
  • 原文地址:https://www.cnblogs.com/zhangfx01/p/14872363.html
Copyright © 2011-2022 走看看