
Oracle
干到60岁退休的码农
这个作者很懒,什么都没留下…
展开
-
Oracle优化:避免全表扫描
1. 对返回的行无任何限定条件,即没有where 子句2. 未对数据表与任何索引主列相对应的行限定条件 例如:在City-State-Zip列创建了三列复合索引,那么仅对State列限定条件不能使用这个索引,因为State不是索引的主列。3. 对索引的主列有限定条件,但是在条件表达式里使用以下表达式则会使索引失效,造成全表扫描: (1)where子句中对字段进行函数、表达式操作,这将导致引擎放弃原创 2017-05-04 10:51:12 · 620 阅读 · 0 评论 -
Oracle 性能优化
(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是转载 2017-05-04 14:54:58 · 364 阅读 · 0 评论 -
Oracle过滤重复数据,取最新的数据
问题:在项目中有一张设备检测信息表DEVICE_INFO_TBL, 每个设备每天都会产生一条检测信息,现在需要从该表中检索出每个设备的最新检测信息。也就是device_id字段不能重复,消除device_id字段重复的记录,而且device_id对应的检测信息test_result是最新的。解决思路:用Oracle的row_number() over函数来解决该问题。 解决过程: 1.查...原创 2018-04-15 10:53:53 · 1944 阅读 · 0 评论 -
Oracle 行转列和列转行
使用场景:在生成报表的时候,很多时候对某列取值固定或者有限的几个值时,进行转列分析。如下: facility列取值只有四种,每种一列,遇到相同facility求和。如下图: 实现方式: 1. DECODE 利用DECODE函数、聚合函数SUM、GROUP BY分组实现。WITH CO_ORDER AS( SELECT 'DOM1' Customer, 'ZH...转载 2018-04-15 11:39:30 · 662 阅读 · 0 评论