1. 程式人生 > >Oracle SQL優化初解

Oracle SQL優化初解

   SQL這個語言發現越寫是發現是越有意思,比如說公司有大牛能把跑快一天的報表優化到半個小時,能把一分鐘的報表優化到1秒,都感覺自己用的是假的SQL。當然雖然這些大牛沒有太多共事,但是也學習到許多SQL知識。
   設計資料庫,需要的是3大正規化  1.無重複列,2.依靠主鍵,不能多主鍵,3.資料列資訊不要重複儲存
    3大正規化中第3個造成資料冗餘其實看情況是可以接受的,因為一定量的資料冗餘可以讓你的業務處理更加方便,當然儘量不要這麼做,但是1,2這2種情況最好不要發生。這些都是血淚的教訓,每一個正規化或者說設計模式都是一個經典,都是一個通用的解決思路,值得學習。
    SQL的優化,是要實事求是的,不同的需求對索引,in,exists之類的用法都需要實事求是。沒有一個一定的標準說一定快
    SQL首先需要看你的表主要是做什麼的,主儲存表,還是主查詢表。對應這個,是否加索引,資料庫表設計時怎麼設計欄位型別,這些都是小事情。
    SQL優化的方式千千萬萬,現在函式的用法,各種各樣的方法,我現在一一總結我覺得是沒有必要的,首先抓住核心,看走的執行計劃,看他的COST,IO COST,CPU COST,Cardinality,檢視這些花銷是否異常
   常用的一些需要注意的就是 外聯結,內聯接,儘量用內聯結,exists,in一般來說都走exists,當然也不是一定的,比如in表中in裡面的資料量更多,更傾向於用In,因為in是走裡面的索引,對此引申出,查詢或許有多個走索引,但是資料量是不同的,根據不同的資料量,走不同的索引,這才是更科學的方法。

    複雜的查詢,一定要記得驅動表這個概念,或者說是檢視,先用子限定條件限定好,作為一個驅動表,然後用驅動表的資料進行和其他的資料用索引進行查詢,這樣是提速度的方法。