| 1 | 4641 | 5060 |00:00:00.07 | 1423 | | | | | 3 | UNION-ALL...VIEW | | 4641 | | 407 (2)| 00:00:05 | | 3 | UNION-ALL...SORT UNIQUE | | 4641 | 186K| 407 (68)| 00:00:05 | | 6 | UNION-ALL...VIEW | | 4641 | | 407 (2)| 00:00:05 | | 3 | UNION-ALL...SORT UNIQUE | | 4641 | 186K| 407 (68)| 00:00:05 | | 6 | UNION-ALL
(注意的是like “aaa%”是可以使用索引的) 8.UNION-ALL代替UNION 如果业务上没有特殊说明,可以考虑用UNION-ALL 替换UNION,因为UNION-ALL不会过滤重复数据,所执行效率要快于...UNION,并且UNION可以自动排序,而UNION-ALL不会,这些细节往往都影响了数据库的性能。
2 | VIEW | VW_JF_SET$623BBB07 | 2 | 200 | 4 (0)| 00:00:01 | | 3 | UNION-ALL...------------- | 0 | SELECT STATEMENT | | 2 | 218 | 8 (50)| 00:00:01 | | 1 | UNION-ALL
| | | 2 | TABLE ACCESS FULL | DRV | 1005 | 5025 | 23 (0)| 00:00:01 | | 3 | UNION-ALL...00:01 | | 2 | VIEW | VW_SQ_1 | 200 | 2600 | 6 (0)| 00:00:01 | | 3 | UNION-ALL
------------------------ | 0 | SELECT STATEMENT | 1 | SORT AGGREGATE | 2 | VIEW | 3 | UNION-ALL
----- | 0 | SELECT STATEMENT | | 75158 | 953K| 40 (3)| 00:00:01 | | 1 | UNION-ALL...--------- | 0 | SELECT STATEMENT | | 107 | 536 | 4 (0)| 00:00:01 | | 1 | UNION-ALL
- | 0 | SELECT STATEMENT | | 2 | 96 | | 1416 (2)| 00:00:17 | | 1 | UNION-ALL...ACCESS FULL | T | 109K| 2362K| | 67 (5)| 00:00:01 | | 6 | UNION-ALL
这也是一条简单而重要的规则,当仅引用索引的 第二个列时,优化器使用了全表扫描而忽略了索引. 28.用 union-all替换 union( 如果有可能的话): 当 SQL 语句需要 union 两个查询结果集合时...,这两个结果集合会以 union-all的方 式被合并, 然后在输出最终结果前进行排序....如果用 union-all替代union, 这样排 序就不是必要了. 效率就会因此得到提高. 需要注意的是, union-all 将重复输出两 个结果集合中相同记录....因此各位还是要从业务需求分析使用 union-all 的可行性. union将对结果集合排序,这个操作会使用到 sort_area_size 这块内存. 对于这块 内存的优化也是相当重要的.
. | | | | 5 | UNION-ALL | | | |...1 | 1 | +0 | 1 | 37 | . | | | | 8 | UNION-ALL
替代DISTINCT,因为RDBMS会在子查询条件满足后立即返回结果 用索引来提高效率,定期的重构索引是有必要的 避免在索引列上计算 用>=代替> 注意隐式转换 UNION-ALL
| | 2 | 184 | 368K (12)| 01:13:48 | | | | 2 | UNION-ALL...| | 2 | 158 | 60 (25)| 00:00:01 | | | | 2 | UNION-ALL...| | 11 | 524 | 254 (49)| 00:00:04 | | | | 2 | UNION-ALL
9、用UNION-ALL 替换UNION 当SQL语句需要UNION两个查询结果集合时,这两个结果集合会以UNION-ALL的方式被合并,然后在输出最终结果前进行排序,并将重复记录过滤掉。
MELBOURNE” 低效: SELECT LOC_ID , LOC_DESC , REGION FROM LOCATION WHERE LOC_ID = 10 OR REGION = “MELBOURNE” 3、用UNION-ALL...替换UNION ( 如果有可能的话): 当 SQL语句需要UNION两个查询结果集合时,这两个结果集合会以UNION-ALL的方式被合并, 然后在输出最终结果前进行排序.
| 1 | 4641 | 5060 |00:00:00.05 | 1423 | | | | | 3 | UNION-ALL...| 1 | 4641 | 1741 |00:00:00.05 | 954 | 178K| 178K| 158K (0)| | 6 | UNION-ALL
| 1 | | | 194K(100)| | 0 |00:00:01.83 | 352K| | 1 | UNION-ALL...| 1 | | | 19 (100)| | 0 |00:00:00.01 | 20 | | 1 | UNION-ALL...| 1 | 2 | 22 | 10 (20)| 00:00:01 | 0 |00:00:00.01 | 12 | | 6 | UNION-ALL
-------- | 0 | SELECT STATEMENT | | 2 | 18 | 2 (0)| 00:00:01 | | 1 | UNION-ALL
| | 536K| 98M| 113M| 56897 (100)| 00:11:23 | | 5 | UNION-ALL...UNIQUE | | 2 | 184 | 11 (64)| 00:00:01 | | 3 | UNION-ALL
替代> (24) 用UNION替换OR (适用于索引列) (25) 用IN来替换OR (26) 避免在索引列上使用IS NULL和IS NOT NULL (27) 总是使用索引的第一个列 (28) 用UNION-ALL...这也是一条简单而重要的规则,当仅引用索引的第二个列时,优化器使用了全表扫描而忽略了索引 回到顶部 (28) 用UNION-ALL 替换UNION ( 如果有可能的话) 当SQL 语句需要UNION两个查询结果集合时...,这两个结果集合会以UNION-ALL的方式被合并, 然后在输出最终结果前进行排序.
有条件的使用union-all 替代 union:这样做排序就不必要了,效率会提高3到5倍。 (8).
领取专属 10元无门槛券
手把手带您无忧上云