成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

通過調節索引 優化Oracle關聯查詢性能

原創
數據庫 Oracle 數據庫運維
這是一個最常見的查詢性能優化方法,有人用“百試不爽”來稱贊這個查詢優化方法,本文就一個真實的系統為例介紹一下如何通過索引優化查詢性能,雖然案例使用的是Oracle數據庫,但本法一樣適用于所有關系數據庫,當你遇到查詢緩慢時,不妨首先用本辦法優化一下,也許有意想不到的效果。

【51CTO獨家特稿】低碳指數:在這里為了方便計算和直觀,我們以Intel至強X7500處理器的TDP為標準計算能耗(TDP=130W/h=2.167W/m=0.036W/s)。另外根據中國林業局的數據,一棵樹一天吸收二氧化碳量為5.023kg,每一度電產生0.785公斤二氧化碳。

如果按照本文方法優化后數據庫執行時間由191秒縮減到189秒,也就是單位時間少1%的能量消耗。那么在一天里將減少0.03kw電能消耗,約合0.023kg二氧化碳排放,按我們的計算是一天減少0.05棵樹二氧化碳吸收量。

本文引用一套實驗室信息管理系統(LIS)使用的數據庫,假設我們要查詢2008年11月做檢驗的患者記錄,條件是大于80歲,姓周的患者,最終結果按檢查日期進行倒序排列。要使用的表有三個:

◆lis_report:報告主表,我們要用到的字段包括i_checkno(檢查號),d_checkdate(檢查日期),i_patientid(患者ID);

◆comm_patient:患者信息表,我們要用到的字段包括i_patientid(患者ID),s_name(患者姓名),s_code(患者住院號),i_age(患者年齡),i_dept(患者所在病區);

◆lis_code_dept:病區信息表,我們要用到的字段包括i_id(病區ID,主鍵,與comm_patient中的i_dept關聯),s_name(病區名)。

最終我們構造的SQL如下:

  1. select a.i_checkno, a.d_checkdate, b.s_name, b.s_code, b.i_age, c.s_name  
  2.   from lis_report a  
  3.  inner join comm_patient b on a.i_patientid = b.i_patientid  
  4.  inner join lis_code_dept c on b.i_dept = c.i_id  
  5.  where a.d_checkdate > '2008-11-01' 
  6.    and a.d_checkdate < '2008-11-30' 
  7.    and b.i_age>=80  
  8.    and b.s_name like '周%' 
  9.  order by a.d_checkdate desc 

我們的SQL使用的這三張表除了創建主鍵時自動創建的索引外,均未創建其它索引,下圖是無索引時的執行計劃。

無索引時的執行計劃

圖 1 無索引時的執行計劃

從圖1可以看出,表comm_patient和lis_report都使用了全表掃描,comm_patient全表掃描的成本是18,lis_report全表掃描的成本是191,只有表lis_code_dept因關聯時使用的是其主鍵,因此這里使用了主鍵索引,從而避免了全表掃描,它的成本是0。我們知道提高查詢性能的目標之一就是消滅掉全表掃描,因此我們應該給表comm_patient和lis_report加上適當的索引,在SQL代碼的where子句中,對comm_patient表,我們引用了i_age和s_name字段,對lis_report表,我們引用了d_checkdate字段,通常給這些條件中引用的字段加上索引會提高查詢速度,我們先給comm_patient的i_gae字段加上索引,下面是對應的執行計劃。

給comm_patient的i_age加上索引后的執行計劃

圖 2 給comm_patient的i_age加上索引后的執行計劃

從圖2可以看出,表comm_patient的全表掃描消失了,取而代之的是索引唯一性掃描,成本從18一下子降低到1了,注意這里并未使用我們給i_age增加的索引,但卻靠它觸發了使用表主鍵對應的索引。但表lis_report仍然是全表掃描,由于where子句中引用了該表的d_checkdate字段,因此我們給該字段加上索引看看效果。

 給lis_report的d_checkdate字段加上索引后的執行計劃

圖 3 給lis_report的d_checkdate字段加上索引后的執行計劃

從上圖可以看出,表lis_report的全表掃描消失了,取而代之的是索引范圍降序掃描(INDEX RANGE SCAN DESCENDING),成本也從191下降到189。注意這里的索引范圍降序掃描的來歷,因為我的where子句中引用d_checkdate是介于2008-11-01至2008-11-30的一個范圍,這時引用的這種字段上建立的索引通常都是執行范圍掃描,因為這種條件返回的值往往不止一行。使用降序掃描的原因是order by子句使用了降序排序,如果我們將SQL代碼中的“order by a.d_checkdate desc”改為“order by a.d_checkdate”,則變為索引范圍掃描(INDEX RANGE SCAN)。

至此我們全部消除了全表掃描,我們看到加上索引后,查詢執行的成本開銷也有所降低,因為數據庫表中的記錄數不大,因此效果不太明顯,如果有上百萬條記錄則會更直觀。

雖然索引能提高查詢性能,但索引也不能濫用,一是因為索引會降低寫入性能,二是索引過多給索引管理帶來麻煩,有些索引根本就沒有使用,這樣的索引只會帶來負面影響,基于這些弊端的考慮,在設計數據庫結構時應綜合考慮表的使用頻率(使用次數越多越應重點考慮是否建立索引),表中字段的使用頻率(字段使用次數越多越應建立索引),字段類型(數值型字段越應建立索引),值的唯一性(最應建立索引的字段),值的重復性(值重復度越高,建立索引的必要性越低),值是否可為空(允許為空的字段一般不建立索引),表中記錄數(記錄數很少時一般不宜建立索引),表是讀操作多一些還是寫操作多一些(讀操作越多的表越應建立索引,寫操作越多的表越應避免建立索引)等,創建索引的一般原則是:在大表的常用且值重復幾率小的字段上創建索引。

數據庫性能優化是無止境的,無論哪種優化技術只是一種手段,但最重要的不是技術,而是思想,掌握了索引優化技術僅僅剛入門,只有融會貫通,舉一反三才能成為高手。

[[11602]]

【編輯推薦】

  1. Oracle數據庫索引的優點與缺點簡介
  2. Oracle使用游標觸發器的實際存儲過程
  3. Oracle使用相關觸發器來實現自增ID
  4. Oracle查看和修改其***的游標數
  5. Oracle delete數據后的釋放表空間問題的解決
責任編輯:彭凡 來源: 51CTO
相關推薦

2017-07-25 15:35:07

MysqlMysql優化LIMIT分頁

2017-08-25 15:28:20

Oracle性能優化虛擬索引

2018-06-07 08:54:01

MySQL性能優化索引

2009-09-25 10:22:35

Hibernate多表

2024-09-19 08:09:37

MySQL索引數據庫

2020-11-05 10:59:45

Mybatis

2012-06-05 02:20:24

JPAJava查詢語言

2015-03-18 13:18:45

MySQLSQL優化

2023-12-14 12:56:00

MongoDB數據庫優化

2024-04-03 09:12:03

PostgreSQL索引數據庫

2010-10-27 13:47:50

Oracle索引

2022-05-11 09:34:15

云原生集群數倉

2010-04-14 12:51:10

Oracle性能

2009-06-30 11:23:02

性能優化

2018-01-09 16:56:32

數據庫OracleSQL優化

2021-10-12 05:00:27

PandasSQL查詢

2020-10-19 19:45:58

MySQL數據庫優化

2010-05-10 15:50:39

Oracle數據庫性能

2023-04-12 08:14:10

mysql關聯字段索引

2021-07-16 23:01:03

SQL索引性能
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产电影一区二区三区爱妃记 | 国产69精品久久99不卡免费版 | 五月婷婷激情网 | 久久久久高清 | 韩日一区二区 | 国产日韩欧美在线 | 在线免费激情视频 | 亚洲精品一区二区在线观看 | 91国内精品久久 | caoporn视频在线 | 中文字幕在线观看成人 | 国内成人免费视频 | 欧美国产视频 | 久久久久国产精品免费免费搜索 | 日韩精品在线播放 | 亚洲视频一区二区三区 | 久久一区精品 | 国产欧美日韩在线 | 久久黄视频 | 拍拍无遮挡人做人爱视频免费观看 | 日韩欧美操 | 久久在线精品 | 在线视频 欧美日韩 | 天堂资源最新在线 | 日韩欧美在线免费观看 | 91在线观看网址 | 日韩中文一区 | 成人在线免费网站 | 亚洲精品日韩在线 | 免费a国产| 国产夜恋视频在线观看 | 日韩精品 电影一区 亚洲 | 国产精品美女久久久久久免费 | 狠狠综合网 | 91麻豆精品国产91久久久更新资源速度超快 | 久草视频在线播放 | 亚洲精品日韩欧美 | 国产精品中文字幕在线观看 | 精品一区二区三区免费视频 | 亚洲三级国产 | xx视频在线 |