1.在polardb-o執行結果返回14秒
查詢得出,統計信息page數量和實際差別20%的表沒有,統計信息也沒有問題。
SELECTordersum as ordersum,
onestatus as onestatus,
twostatus as twostatus,
threestatus as threestatus,
fourstatus as fourstatus,
archive as archive,
elevenstatusas elevenstatus
FROM(SELECT ***
FROMxx a
***
ANDa.case_time >= trunc(sysdate - 30, dd))
嘗試將sysdate修改為now,執行時間1.72秒,效率提升很多.
這個sysdate和now有啥不一樣呢?
兩者的provolatile分別為s和v,原因是sysdate這個函數被標記為了volatile,那么它的值只有在讀到一條記錄的時候才能確定,這樣就不能走索引了。
簡單描述如下:
IMMUTABLE(非常穩定)
表示該函數不能修改數據庫并且對于給定的參數值總是會返回相同的值。也就是說,它不會做數據庫查找或者使用沒有在其參數列表中直接出現的信息。如果給定合格選項,任何用全常量參數對該函數的額調用可以立刻用該函數值替換。
STABLE(穩定)
表示該函數不能修改數據庫,并且對于相同的參數值,它在一次表掃描中將返回相同的結果。在大多數情況下是的。在單個表掃描中,對相同的參數值返回相同的結果,但結果將通過SQL語句進行更改。結果取決于數據庫查找或參數值。current_timestamp系列函數是STABLE;值在執行中不會改變。
VOLATILE(不穩定)
默認為VOLATILE。表示該函數的值在一次表掃描中都有可能改變,因此不能做優化。在這種意義上,相對較少的數據庫函數是不穩定的。例如:random(), currval(), timeofday()。任何具有副作用的函數的都不穩定的,即使其結果是可預測的。例如:setval().
理解測試:
Oracle的sysdate的值為語句開始的值,并且在整個sql的生命周期中是保持不變的。
Polardb-o的sysdate的值,在每次讀一行的時候重新計算了,這樣是不能走索引的。
alterfunction sysdate() strict stable;
或updatepg_proc set provolatile = s where proname = sysdate;
再次執行查詢語句,返回時間2.4秒,耗時基本和oracle持平,通知應用再次測試,反饋沒有問題。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/130110.html
使用BenchmarkSQL對Polardb數據庫進行TPCC測試 img{ display:block; margin:0 auto !important; width:100%; } body{ width:...
摘要:作者譚峰張文升出版日期年月頁數頁定價元本書特色中國開源軟件推進聯盟分會特聘專家撰寫,國內多位開源數據庫專家鼎力推薦。張文升中國開源軟件推進聯盟分會核心成員之一。 很高興《PostgreSQL實戰》一書終于出版,本書大體上系統總結了筆者 PostgreSQL DBA 職業生涯的經驗總結,本書的另一位作者張文升擁有豐富的PostgreSQL運維經驗,目前就職于探探科技任首席PostgreS...
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1858·2023-01-11 13:20
閱讀 4100·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3597·2023-01-11 13:20