sql數據庫語句優化分析和優化技巧總結(sql優化工具)

通常sql數據庫需要進行優化分析,并且還有一定的技巧,sql優化的幾種方法這里就不做詳細介紹了,本文將會sql語句優化進行總結,后面還附了優化工具SQL Tuning Expert for oracle及使用方法,首先我們要遵隨數據庫優化的幾個原則:

1.盡量避免在列上做運算,這樣會導致索引失敗;

2.使用join是應該用小結果集驅動大結果集,同時把復雜的join查詢拆分成多個query。不然join的越多表,就會導致越多的鎖定和堵塞。

3.注意like模糊查詢的使用,避免使用%%,例如select * from a where name like ‘%de%’;

代替語句:select * from a where name >= ‘de’ and name

4.僅列出需要查詢的字段,不要使用select * from …,節省內存;

5.使用批量插入語句,節省交互;

insert?into?a?(id?,name) values(2,'a'), (3,'s');

6.limit基數比較大時,使用between … and …

7.不要使用rand函數隨機獲取記錄;

8.避免使用NULL ,這就需要在建表時,盡量設置為not null,提升查詢性能;

9,不要使用count(id),而應該是count(*)

10.不要做無謂的排序,盡可能在索引中完成排序;

我們先來看一個sql:

?select ????????????????????ii.product_id,? ????????????????????p.product_name,? ????????????????????count(distinct?pim.pallet_id)?count_pallet_id,? ????????????????????if(round(sum(itg.quantity),2)?&gt;?-1?&amp;&amp;?round(sum(itg.quantity),2)??-1?&amp;&amp;?round(sum(itg.qoh),2)?<p>?上面的sql我們在from 中使用了子查詢,這樣對查詢是非常不利的;</p><p>更好的一種做法是下面的語句:</p><pre class="brush:sql;toolbar:false;">select?? ????????????????t.facility_id, ????????????????f.facility_name, ????????????????t.inventory_status, ????????????????wis.inventory_status_name, ????????????????t.inventory_type, ????????????????t.product_type, ????????????????t.product_id,? ????????????????p.product_name, ????????????????t.container_id,? ????????????????t.unit_quantity,? ????????????????p.unit_code, ????????????????p.unit_code_name, ????????????????pc.container_unit_code_name, ????????????????t.secret_key, ????????????????sum(t.quantity)?quantity, ????????????????sum(t.real_quantity)?real_quantity, ????????????????sum(t.locked_quantity)?locked_quantity, ????????????????sum(t.locked_real_quantity)?locked_real_quantity ????????????from?(?select? ????????????????????????ii.facility_id, ????????????????????????ii.inventory_status, ????????????????????????ii.inventory_type, ????????????????????????ii.product_type, ????????????????????????ii.product_id,? ????????????????????????ii.container_id,? ????????????????????????ii.unit_quantity,? ????????????????????????ita.secret_key, ????????????????????????ii.quantity?quantity, ????????????????????????ii.real_quantity?real_quantity, ????????????????????????sum(ita.quantity)?locked_quantity, ????????????????????????sum(ita.real_quantity)?locked_real_quantity ????????????????????from? ????????????????????????ws_inventory_item?ii? ????????????????????????inner?join?ws_inventory_transaction_action?ita?on?ii.inventory_item_id?=?ita.inventory_item_id ????????????????????where? ????????????????????????ii.facility_id?=?'{$facility_id}'?and? ????????????????????????ii.inventory_status?=?'{$inventory_status}'?and? ????????????????????????ii.product_type?=?'{$product_type}'?and? ????????????????????????ii.inventory_type?=?'{$inventory_type}'?and ????????????????????????ii.locked_real_quantity?&gt;?0?and? ????????????????????????ita.type?in?('locked',?'release')? ????????????????????group?by? ????????????????????????ii.product_id,?ita.secret_key,?ii.container_id,?ita.inventory_item_id ????????????????????having? ????????????????????????locked_real_quantity?&gt;?0? ????????????)?as?t ????????????????inner?join?ws_product?p?on?t.product_id?=?p.product_id? ????????????????left?join?ws_facility?f?on?t.facility_id?=?f.facility_id ????????????????left?join?ws_inventory_status?wis?on?wis.inventory_status?=?t.inventory_status ????????????????left?join?ws_product_container?pc?on?pc.container_id?=?t.container_id???????????? ????????????group?by? ????????????????t.product_id,?t.secret_key,?t.container_id

?注意:

1、from 語句中一定不要使用子查詢;

2、使用更多的where加以限制,縮小查找范圍;

3、合理利用索引;

4、通過explain查看sql性能;

使用工具 SQL Tuning Expert for Oracle 優化SQL語句

對于SQL開發人員和dba來說,根據業務需求寫出一條正確的SQL很容易。但是SQL的執行性能怎么樣呢?能優化一下跑得更快嗎?如果不是資深?
DBA,估計很多人都沒有信心。

幸運的是,自動化優化工具可以幫助我們解決這個難題。這就是今天要介紹的 Tosska SQL Tuning Expert for Oracle 工具。

下載?https://tosska.com/tosska-sql-tuning-expert-tse-oracle-free-download/

本工具發明人Richard To, Dell的前首席工程師, 擁有超過20年的SQL優化經驗.

sql數據庫語句優化分析和優化技巧總結(sql優化工具)

1、創建數據庫連接,也可以稍后創建。填好連接信息,點擊 “Connect” 按鈕。

如果您已經安裝Oracle客戶端,并且在Oracle客戶端配置了TNS,可以在本窗口選擇“TNS”作為”Connection Mode”,然后在”database Alias”中選擇配置好的TNS作為數據庫別名。?

sql數據庫語句優化分析和優化技巧總結(sql優化工具)

如果您沒有安裝Oracle客戶端或者不想安裝Oracle客戶端, 可以選擇“Basic Type”作為”Connection Mode”,只需數據庫服務器IP, 端口和服務名即可。?

sql數據庫語句優化分析和優化技巧總結(sql優化工具)

2、輸入有性能問題的SQL?

sql數據庫語句優化分析和優化技巧總結(sql優化工具)

3、點擊Tune按鈕,自動生成大量的等價SQL并且開始執行。雖然測試還沒有完成,我們已經可以看到 SQL 20 的性能提升了100%。?

sql數據庫語句優化分析和優化技巧總結(sql優化工具)

讓我們仔細看一下SQL 20, 它使用了兩個Hints, 以最快的執行速度脫穎而出。原來的SQL要0.99秒,優化后的SQL執行時間接近0秒。

?由于這條SQL每天要在數據庫中執行上萬次,優化后可節省大約 165秒的數據庫執行時間。sql數據庫語句優化分析和優化技巧總結(sql優化工具)

最后,用等價的SQL 20 替換 應用程序源代碼中有性能問題的SQL。重新編譯應用程序,性能得到了提高。

調優任務順利完成!

相關文章:

https://tosska.com/tosska-sql-tuning-expert-tse-oracle-free-download/

https://tosska.com/tosska-sql-tuning-expert-tse-oracle-free-download/

相關視頻:

https://tosska.com/tosska-sql-tuning-expert-tse-oracle-free-download/

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享