LightDB 22.4 新特性之支援Oracle cardinality和ordered_predicates hint

哎呀我的天吶發表於2022-12-28

Oracle中cardinality的作用是告訴最佳化器表中的資料有多少行,比如表時機有100行,可以指定最佳化器讓最佳化器認為有1000行

alter session set statistics_level = all;
select /*+cardinality(e 1000)*/ * from emp e ;
select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));

下面我們看下lightdb的實現

lightdb@test=# explain  select /*+cardinality(e 1000)*/ * from emp e ;
                            QUERY PLAN                            
------------------------------------------------------------------
 Seq Scan on emp e @"lt#0"  (cost=0.00..1.14 rows=1000 width=164)
(1 row)


另外一個hint ordered_predicates

ordered_predicates提示在查詢的WHERE子句裡指定的,並被用來指定布林判斷(Boolean predicate)被評估的順序。在沒有ordered_predicates的情況下,Oracle會使用下面這些步驟來評估SQL判斷的順序:

子查詢的評估先於外層WHERE子句裡的Boolean條件。

所有沒有內建函式或者子查詢的布林條件都按照其在WHERE子句裡相反的順序進行評估,即最後一條判斷最先被評估。

每個判斷都帶有內建函式的布林判斷都依據其預計的評估值按遞增排列。

你可以使用ordered_predicates提示來強制取代這些預設的評估規則,那麼你WHERE子句裡的專案就會按照其在查詢裡出現的順序被評估。在查詢的WHERE子句裡使用了PL/SQL函式的情況下,通常會使用ordered_predicates提示。如果你知道限制最多的判斷並且希望Oracle最先評估這些判斷的時候,在這種情況下,它也是非常有用的。用法提示:你不能使用ordered_predicates提示來儲存對索引鍵進行判斷評估的順序。

lightdb@test=# explain
select /*+ ordered_predicates */ * from emp where mod(deptno,10) > 1 and empno > 1;
                                     QUERY PLAN                                     
------------------------------------------------------------------------------------
 Seq Scan on emp @"lt#0"  (cost=0.00..1.25 rows=2 width=164)
   Filter: ((mod(deptno, '10'::numeric) > '1'::numeric) AND (empno > '1'::numeric))
(2 rows)
lightdb@test=#explain select /*+ ordered_predicates */ * from emp where  empno > 1 and mod(deptno,10) > 1;
                                     QUERY PLAN                                     
------------------------------------------------------------------------------------
 Seq Scan on emp @"lt#0"  (cost=0.00..1.25 rows=2 width=164)
   Filter: ((empno > '1'::numeric) AND (mod(deptno, '10'::numeric) > '1'::numeric))
(2 rows)



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29990276/viewspace-2929835/,如需轉載,請註明出處,否則將追究法律責任。

相關文章