数据库高级话题

    技术2022-05-19  21

     

     

     

    SQL注入 (过滤敏感字段or等,参数化SQL)

     

    SQL调优

    基本原则:二八原则  20%的代码资源占用了80%的总资源消耗

     

     

     

    用where子句代替 habing子句

     

    使用表的别名

     

    用exists替代 in

    用表连接替换exists

     

    用union all替换 union

     

    IS NULL  正确写法

     

    如果null出现在计算字段里,那么结果永远是null

    解决:

    1.用is not null把其过滤掉

    2.使用case函数将 null值转换为0

     

    select FId, FName, FSalary,

    (

      CASE

         WHEN FSalary IS NULL THEN 0

         ELSE  FSalary

      END

    )

     + 2000,

    FROM T_Employee

     

     

     

     

    事务隔离:

    事务将锁 分为两种类型:只读锁,写入锁

    只读锁是非独占的,多个并发事务都能获得只读锁,

    写入锁是独占的,任意时间只能有一个事务可以获得写入锁

     

    隔离性通过加锁的方式获得,使用较高的隔离级别,则事务会较好地与其他事务相隔离,当然也会带来大量的系统开销,如果使用较低的隔离级别,则事务的隔离性会比较差,但是能获得更好的性能。

    脏读

    不可重复读(B更新)

    幻影读取(B插入)

     

     

     

     

     

     

     

     

     

    开窗函数   oracle里称为分析函数,而在DB2中称为OLAP函数    函数名 (列) OVER (选项)

     

    WITH 子句与子查询

     

     

     

     

    select 列表中的 所有列如果 不是在聚合函数中使用,则必须 加入group by 子句中。

    使用开窗函数 over() 将不用使用group by子句

     

     

     

     

     

     

     

    表复制,

    复制源表的结构并复制表中的数据

    mysql,oracle:

    create table T_Person2 AS SELECT * FROM T_Person

     

    sql server:

    select * into T_Person2 FROM T_Person

     

     

     

     

     

     

    只复制 源表的结构:

    create table ss

    as

    select * from aaa

    where 1 <> 1

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     


    最新回复(0)