数码资讯
SQL性能优化系列学习三
您正在学习的Oracle课程是:Oracle SQL性能优化系列学习三。8。使用解码功能减少处理时间 使用解码功能可以避免重复扫描同一记录或重复同一表。 例如: 从电磁脉冲中选择计数(*)、和(萨尔) 在dept_no = 0020 不喜欢和史密斯%; 选择计数(*),和(萨尔) 从EMP 在dep
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
您正在学习的Oracle课程是:Oracle SQL性能优化系列学习三。8。使用解码功能减少处理时间
使用解码功能可以避免重复扫描同一记录或重复同一表。
例如:
从电磁脉冲中选择计数(*)、和(萨尔)
在dept_no = 0020
不喜欢和史密斯%;
选择计数(*),和(萨尔)
从EMP
在dept_no = 0030
不喜欢和史密斯%;
使用解码函数可以得到同样的结果。
select count(解码(dept_no,0020,x,d0020_count空)),
计数(解码(dept_no,0030,x,d0030_count空)),
和(解码(dept_no,0020,萨尔,null))d0020_sal,
和(解码(dept_no,0030,萨尔,null))d0030_sal
从EMP在ename喜欢史密斯%;
同样,解码功能也可用于按组和按子句排序。
9。简单、无关数据库访问的集成
如果有几个简单的数据库查询语句,可以将它们集成到查询中(即使它们之间没有关系)
例如:
从EMP中选择名称
在emp_no = 1234;
选择的名字从DPT
在dpt_no = 10;
从猫中选择名称
在cat_type =路;
上述3个查询可以合并为一个:
选择查询,d.name,c.name猫C、DPT、电磁脉冲、双
在NVL('x',NVL(X.DUMMY)= 'x',E.ROWID(+))
NVL('x',NVL(X.DUMMY)= 'x',D.ROWID(+))
NVL('x',NVL(X.DUMMY)= 'x',C.ROWID(+))
和e.emp_no(+)= 1234
和d.dept_no(+)= 10
和c.cat_type(+)=路;
读者必须权衡过程的利弊,尽管效率提高了,但程序的可读性却大大降低了。
10。删除重复记录
删除重复记录的最有效的方法(因为数据使用)
删除EMP
在e.rowid >(选择min(x.rowid))
从EMP X
在x.emp_no = e.emp_no);
11。而不是用截断删除
当删除表中的记录,在一般情况下,回滚段(回滚段)是用于存储的信息可以恢复。如果您没有提交事务,Oracle将在执行删除命令状态之前,将数据删除回状态(在执行删除命令状态之前进行精确恢复),以及使用截断时。没有回滚存储,任何信息都可以恢复。当命令运行时,数据无法恢复。如此少的资源被调用,执行时间会很短。(注:截断只适用于删除所有的表,是不是将DDL DML)
12。尽可能多地使用提交
尽可能长地在程序中尽可能多地使用提交,从而提高程序的性能,并减少由于提交所释放的资源而降低的需求:
提交资源:
用于在回滚段上恢复数据的信息。
由程序语句获得的锁。
重做日志缓冲区
Oracle是管理这3种资源的内部成本。
(注:使用委托时必须注意交易的完整性,真正的效率和交易的完整性往往是不能既有鱼也有熊掌的)
如果空值、和(空)值的解码值是空的——>如果所有的值都是空的,和(NULL)= NULL,但只要有一个值不是null,则(空)<所以原始SQL不应该有什么逻辑问题。
在第八点个人看法:如果值解码是空的,和的值(null)是无效的,它不会总结正常。你可以改变如下:select count(解码(dept_no,0020,x,null)d0020_count(解码),计数(0030、dept_no,'x',null)d0030_count(解码),和(0020,dept_no,SAL,d0020_sal,和(0))(dept_no解码,0030。萨尔,0)d0030_sal从EMP在ENAME像)史密斯%;
使用解码功能可以避免重复扫描同一记录或重复同一表。
例如:
从电磁脉冲中选择计数(*)、和(萨尔)
在dept_no = 0020
不喜欢和史密斯%;
选择计数(*),和(萨尔)
从EMP
在dept_no = 0030
不喜欢和史密斯%;
使用解码函数可以得到同样的结果。
select count(解码(dept_no,0020,x,d0020_count空)),
计数(解码(dept_no,0030,x,d0030_count空)),
和(解码(dept_no,0020,萨尔,null))d0020_sal,
和(解码(dept_no,0030,萨尔,null))d0030_sal
从EMP在ename喜欢史密斯%;
同样,解码功能也可用于按组和按子句排序。
9。简单、无关数据库访问的集成
如果有几个简单的数据库查询语句,可以将它们集成到查询中(即使它们之间没有关系)
例如:
从EMP中选择名称
在emp_no = 1234;
选择的名字从DPT
在dpt_no = 10;
从猫中选择名称
在cat_type =路;
上述3个查询可以合并为一个:
选择查询,d.name,c.name猫C、DPT、电磁脉冲、双
在NVL('x',NVL(X.DUMMY)= 'x',E.ROWID(+))
NVL('x',NVL(X.DUMMY)= 'x',D.ROWID(+))
NVL('x',NVL(X.DUMMY)= 'x',C.ROWID(+))
和e.emp_no(+)= 1234
和d.dept_no(+)= 10
和c.cat_type(+)=路;
读者必须权衡过程的利弊,尽管效率提高了,但程序的可读性却大大降低了。
10。删除重复记录
删除重复记录的最有效的方法(因为数据使用)
删除EMP
在e.rowid >(选择min(x.rowid))
从EMP X
在x.emp_no = e.emp_no);
11。而不是用截断删除
当删除表中的记录,在一般情况下,回滚段(回滚段)是用于存储的信息可以恢复。如果您没有提交事务,Oracle将在执行删除命令状态之前,将数据删除回状态(在执行删除命令状态之前进行精确恢复),以及使用截断时。没有回滚存储,任何信息都可以恢复。当命令运行时,数据无法恢复。如此少的资源被调用,执行时间会很短。(注:截断只适用于删除所有的表,是不是将DDL DML)
12。尽可能多地使用提交
尽可能长地在程序中尽可能多地使用提交,从而提高程序的性能,并减少由于提交所释放的资源而降低的需求:
提交资源:
用于在回滚段上恢复数据的信息。
由程序语句获得的锁。
重做日志缓冲区
Oracle是管理这3种资源的内部成本。
(注:使用委托时必须注意交易的完整性,真正的效率和交易的完整性往往是不能既有鱼也有熊掌的)
如果空值、和(空)值的解码值是空的——>如果所有的值都是空的,和(NULL)= NULL,但只要有一个值不是null,则(空)<所以原始SQL不应该有什么逻辑问题。
在第八点个人看法:如果值解码是空的,和的值(null)是无效的,它不会总结正常。你可以改变如下:select count(解码(dept_no,0020,x,null)d0020_count(解码),计数(0030、dept_no,'x',null)d0030_count(解码),和(0020,dept_no,SAL,d0020_sal,和(0))(dept_no解码,0030。萨尔,0)d0030_sal从EMP在ENAME像)史密斯%;
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。