程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle 10g sql優化之索引篇

Oracle 10g sql優化之索引篇

編輯:Oracle數據庫基礎

網站速度變慢時,你會考慮到什麼解決方法?筆者最近公司網站的速度一起很不理想,文章頁面基本都要 10s 以上才能打開。數據庫用的是 Oracle 10g Express Edtion,存放文章的表超過了 10 萬數據量,類似執行一個 select count(1) from res where class_id=1 這樣的語句就經常在 10s 以上。然而,今天我在 class_id 上加了一個索引,這條語句的執行時間就幾乎變成了 0s。效果之顯著,完全出乎我的預料。下面是Oracle 10g sql優化相關的總結:

1. 監控 select 語句

(“數據庫主頁”從開始菜單裡“Oracle Database 10g Express Edition”的“轉至數據庫主頁”進入)

進入“數據庫主頁>管理>數據庫監視器>會話>SQL”頁面,在“搜索”裡輸入“select”,點擊“開始”。 這樣就可以看到最近執行的 select 語句。點擊“SQL”列裡的 SQL 語句鏈接,查看執行情況。其中,“CPU時間”即為執行所用的時間,“已處理的行數”為查詢結果的行數。下面的“SQL文本”是 SQL 語句的完整內容,“索引”區域顯示該查詢使用了哪個索引。

找到“CUP時間”超過 1 秒的查詢,看是否需要添加索引。

2. 添加索引

進入“數據庫主頁>對象浏覽器”頁面,在右邊偏上方有一個“創建”按鈕。點擊“創建” 按鈕,在出現的菜單裡選擇“索引”,然後輸入“表名”,“索引類型”使用“常規”,再點擊“下一步”。

在新出現的頁面,輸入索引的名稱和索引列。如果是不唯一的字段,最好將“單性值”設置為唯一,可能有助提高檢索速度。再點擊“下一步”,點擊“完成”按鈕。

照我的理解,創建索引時選擇什麼索引列,應該是由 select 語句的 where 部分決定的。比如 where id=1 ,只需選擇 id 一個索引列;如果是 where id=1 and name=2 ,則需要選擇 id 和 name 兩個索引列來創建索引。只對主鍵進行索引,因為是唯一的,所以將“單性值”設置為“唯一”。

數據量比較大的表,都應在其主鍵上創建一個索引,其它需要的另加。

order by 語句裡的字段,一般無法使用索引,所以,盡量在 order by 之前將查詢結果的行數縮到最少。

要提高 order by 語句的執行效率,可適當增加 sort_area_size 的值( 10240000=10m ):

  1. alter system set sort_area_size=10240000 scope=spfile; 

這樣就實現了Oracle 10g sql優化的索引優化。

附一:為表添加主鍵

進入“數據庫主頁>對象浏覽器”頁面,在左則選擇要創建主鍵的表。在右邊出現的表頁面中,點擊“約束條件”->“創建”,“約束條件類型”設置為“主鍵”,其它自行填寫。

附二:Oracle 配置參數查詢語句

  1. SELECT NAME,VALUE  
  2. FROM v$parameter  
  3. WHERE NAME IN 
  4. (’sga_max_size’,'db_cache_size’,  
  5. ’shared_pool_size’,’shared_pool_reserved_size’,'large_pool_size’,'Java_pool_size’,  
  6. ‘db_block_size’,'db_block_buffers’,'log_buffer’,’sort_area_size’,’sort_area_retained_size’,  
  7. ‘hash_area_size’,’sessions’,'open_cursors’  
  8. )ORDER BY NAME

附三:其它參數設置命令

  1. alter system set sga_max_size=700m scope=spfile;  
  2.  
  3. alter system set sga_target=700m scope=spfile;  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved