SQL 優化過程

2022-02-15 03:03:49 字數 1359 閱讀 2412

資料庫層面優化解決思路:

當出現sql查詢比較慢問題

在資料庫層面,優化方法一般採用,減少訪問次數,高效sql,建立索引和建立表分割槽,好的資料庫表設計。

情況一:乙個功能執行很慢,通過sql profile取出sql語句。如果檢視sql的各個表,如果查詢的表的資料量在5萬以下,

1,看該查詢sql是否在迴圈語句的呼叫,如果是看是否能改成一條sql,儘量減少訪問資料庫

情況二,查詢的表資料量比較大(超過50萬以上)

1,檢查sql語句的寫法:

1.1,避免使用: like  『%關鍵字%』

1.2,使用分頁,減少查詢出資料量。

1.3,避免在索引欄位上使用函式,索引列上使用內建的函式或表示式時,優化器不能使用這些列的索引,盡量改寫表示式.例如:

1.3.1,au_fname + ' ' + au_lname = 'johnson white' 改為 au_fname = 'johnson' and au_lname = 'white'

1.3.2,substring( au_lname, 1, 2 ) = 'wh'改為au_lname like 'wh%'

1.3.3,datepart( year, hire_date ) = 1990 and datepart( quarter, hire_date ) = 1改為ire_date >= 『1/1/1990』 and hire_date < 『4/1/1990』

1.3.4,convert( char(10),hire_date, 101 ) = 『2/21/1990』改為hire_date >= 『2/21/1990』 and hire_date < 『2/22/1990』

1.4,盡量使用「union all」或「union」語句代替「or」關鍵字,相對於union優先使用union all,因為union會在表聯接後排序,然後去除其中重複語句,對於大結果集可能會比較耗費資源

1.5,盡量使用關聯查詢代替子查詢

1.6,在儲存過程開頭加上set nocount on,結尾加上set nocount off,如果儲存過程中包含一些並不返回許多實際資料的語句,或者如果過程包含 transact-sql 迴圈,網路通訊流量便會大量減少.(set nocount:阻止在結果集中返回可顯示受 transact-sql 語句或儲存過程影響的行計數的訊息)

2,對查詢的字段建立索引

如:select * from doc  where objid=』 4028819e181e984c01181f5874f703f1』,查詢如果慢的話,就需要在doc 表的objid建立索引

3,對大表建立分割槽

對大型的表一般建立分割槽,可以按照是否結束(isfinished),是否刪除(isdeleted),和模組分割槽(doc ,cusr等)等來分割槽。

sql優化過程 執行計畫

1 什麼是sql執行計畫 sql執行計畫,就是一條sql語句,在資料庫中實際執行的時候,一步步的分別都做了什麼。就是我們用explain分析一條sql語句時展示出來的那些資訊 2 sql執行計畫的作用 sql執行計畫的意義就在於我們可以通過執行計畫更加清晰的認識到這一條語句,分為了哪幾步,有沒有用到...

SQL語句的優化過程(2)

上述語句訪問表 tb user grant 中10 的資料。連線 join 方法 連線是指從乙個或者多個表中檢索資料。oracle主要有3種連線方法 巢狀迴圈連線 nested loop joins 雜湊連線 hash joins 和排序合併連線 sort merge joins 在select語句...

記錄一次sql優化過程

對於我這種剛剛進入dba行業的人來說sql優化是一件很難的事情。所以今天看了一下別人優化的過程順手記錄的一筆。select distinct vi.policy no from odsdata.policy extend info ei,policy vehicle info vi,policy b...