SQL效能優化 1

2021-06-07 16:04:11 字數 2522 閱讀 2117

優化1:

原始sql語句如下:

select *

from (select c.product_name,

a.prd_inst_name,

m.name prd_state,

a.accept_date,

m1.name basic_state,

a.evolution_pty_id,

decode(a.if_prepay, 1, '是', '否

') prepay,

a.install_addr,

a.install_date,

a.service_nbr,

a.ofr_id,

m2.name ofr_name,

d.cust_name,

rownum num

from crm_tb_prd_prd_inst       a,

crm_tb_prd_prd            c,

crm_tb_pty_cust           d,

m_prd_inst_stas           m,

m_prd_inst_base_state     m1,

m_prdmark_inst_base_state m2,

ext_crm_tb_prd_prd_inst   ext

where a.prd_id = c.product_id

and m.gwm_fid(+) = a.prd_inst_stas_id

and m1.basic_state(+) = a.basic_state

and m2.ofr_id(+) = a.ofr_id

and a.prd_inst_id(+) = ext.prd_inst_id

and d.cust_id(+) = a.own_cust_id

and ext.building_fid = 693253

and rownum <= 10)

where num > 0;

資料庫中,a、c、d 三張表中資料十萬數量級,每查詢一次,時間約為75s。

查詢表結構,發現a表關聯的m表的外來鍵ofr_id ,m1表的外來鍵basic_state,d表的外來鍵own_cust_id均無索引,為其新增索引。

索引新增後,執行速度提公升為53s左右,效果仍不明顯。

分析查詢語句,發現查詢時使用了 rownum 做分頁查詢的控制條件。當多表連線查詢時,oracle資料庫會自動檢查每一張表的rownum,

從而導致效能緩慢,修改原sql語句,新增一層虛擬表,在虛擬表外判斷rownum值而控制分頁,解決多表同時檢查rownum的情況。修改

後,速度提公升為13s左右

修改後的sql語句如下:

select *

from (select c.product_name,

a.prd_inst_name,

m.name prd_state,

a.accept_date,

m1.name basic_state,

a.evolution_pty_id,

decode(a.if_prepay, 1, '是', '否

') prepay,

a.install_addr,

a.install_date,

a.service_nbr,

a.ofr_id,

m2.name ofr_name,

d.cust_name,

rownum num

from crm_tb_prd_prd_inst       a,

crm_tb_prd_prd            c,

crm_tb_pty_cust           d,

m_prd_inst_stas           m,

m_prd_inst_base_state     m1,

m_prdmark_inst_base_state m2,

ext_crm_tb_prd_prd_inst   ext

where a.prd_id = c.product_id

and m.gwm_fid(+) = a.prd_inst_stas_id

and m1.basic_state(+) = a.basic_state

and m2.ofr_id(+) = a.ofr_id

and a.prd_inst_id(+) = ext.prd_inst_id

and d.cust_id(+) = a.own_cust_id

and ext.building_fid = 356009) tab

where tab.num <= 10 and tab.num > 0;

集合運算大多數時候是為了讓你的那些複雜的條件的查詢看起來更容易,呵呵,因為它被分解了。至於在速度上通常來說union all 不要排序和單條執行的速度大體相當,但是union因為要排序速度會下降很多的。具體的情況當然要看你如何優化自己的sql語句了,沒有絕對的快慢的。
優化2:

SQL效能優化1

一 問題的提出 在應用系統開發初期,由於開發資料庫資料比較少,對於查詢sql語句,複雜檢視的的編寫等體會不出sql語句各種寫法的效能優劣,但是如果將應用系統提交實際應用後,隨著資料庫中資料的增加,系統的響應速度就成為目前系統需要解決的最主要的問題之一。系統優化中乙個很重要的方面就是sql語句的優化。...

效能優化 SQL優化

1.列型別盡量定義成數值型別,且長度盡可能短,如主鍵和外來鍵,型別字段等等 2.建立單列索引 3.根據需要建立多列聯合索引 當單個列過濾之後還有很多資料,那麼索引的效率將會比較低,即列的區分度較低,那麼如果在多個列上建立索引,那麼多個列的區分度就大多了,將會有顯著的效率提高。4.根據業務場景建立覆蓋...

SQL效能優化

postgre資料表資料比較多的情況下,使用模糊查詢效能很差,但是使用函式反而快了,返回資料一致,有點不解 warning表2688133條資料,warning message表6954788條資料 這個sql執行老半天都沒反映,耗時169904 ms select count 1 from war...