sql语句相关

来源:互联网 发布:传奇宝宝升级数据 编辑:程序博客网 时间:2024/06/18 12:20
  • Sql语句里的递归查询
    id pid name
    1 0 aaa
    2 0 bbb
    3 1 ccc
    4 1 ddd
    with cte(id,pid,name)
    as
    (--父项
    select id,pid,name from test_aaa where pid = 1
    union all
    --递归结果集中的下级
    select t.id,t.pid,t.name from test_aaa as t
    inner join cte as c on t.pid = c.id
    )
    select id,pid,name from cte
    Oracle 中的树查询
    使用 connect by 和 start with
    select
    from
    where
    start with
    connect by
    order by
    SELECT n_parendid, n_name, (LEVEL - 1), n_id
    FROM navigation
    WHERE n_parendid IS NOT NULL
    START WITH n_id = 0
    CONNECT BY n_parendid = PRIOR n_id;
    sql优化
    避免类型转换
    尽早过滤数据,加分区
    只选择所需字段
    避免同一个sql太复杂,可采用中间表
    union all表多余2,可拆分为多个insert
    join时,小表放左边,左边会加载到内存
    避免使用null:null对大多数数据库来说都需要特殊处理,在创建表时,字段默认值给一个特殊值,避免用null
    尽可能使用更小的字段:读取数据是从磁盘读取到内存中的,越小的数据类型占用的空间越小,从磁盘到内存的效率更好,但考虑以后的扩展性,需找到一个平衡点
    优化union :确定不会有重复的采用union all,但union all不会进行排序
0 0
原创粉丝点击