IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置: 首頁數(shù)據(jù)庫Oracle → Oracle 10g sql優(yōu)化之索引篇

Oracle 10g sql優(yōu)化之索引篇

時(shí)間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)

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

  1. 監(jiān)控 select 語句

  ("數(shù)據(jù)庫主頁"從開始菜單里"Oracle Database 10g Express Edition"的"轉(zhuǎn)至數(shù)據(jù)庫主頁"進(jìn)入)

  進(jìn)入"數(shù)據(jù)庫主頁>管理>數(shù)據(jù)庫監(jiān)視器>會(huì)話>SQL"頁面,在"搜索"里輸入"select",點(diǎn)擊"開始"。這樣就可以看到最近執(zhí)行的 select 語句。點(diǎn)擊"SQL"列里的 SQL 語句鏈接,查看執(zhí)行情況。其中,"CPU時(shí)間"即為執(zhí)行所用的時(shí)間,"已處理的行數(shù)"為查詢結(jié)果的行數(shù)。下面的"SQL文本"是 SQL 語句的完整內(nèi)容,"索引"區(qū)域顯示該查詢使用了哪個(gè)索引。

  找到"CUP時(shí)間"超過 1 秒的查詢,看是否需要添加索引。

  2. 添加索引

  進(jìn)入"數(shù)據(jù)庫主頁>對(duì)象瀏覽器"頁面,在右邊偏上方有一個(gè)"創(chuàng)建"按鈕。點(diǎn)擊"創(chuàng)建" 按鈕,在出現(xiàn)的菜單里選擇"索引",然后輸入"表名","索引類型"使用"常規(guī)",再點(diǎn)擊"下一步"。

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

  照我的理解,創(chuàng)建索引時(shí)選擇什么索引列,應(yīng)該是由 select 語句的 where 部分決定的。比如 where id=1 ,只需選擇 id 一個(gè)索引列;如果是 where id=1 and name=2 ,則需要選擇 id 和 name 兩個(gè)索引列來創(chuàng)建索引。只對(duì)主鍵進(jìn)行索引,因?yàn)槭俏ㄒ坏模詫?單性值"設(shè)置為"唯一"。

  數(shù)據(jù)量比較大的表,都應(yīng)在其主鍵上創(chuàng)建一個(gè)索引,其它需要的另加。

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

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

alter system set sort_area_size=10240000 scope=spfile; 

  這樣就實(shí)現(xiàn)了Oracle 10g sql優(yōu)化的索引優(yōu)化。

  附一:為表添加主鍵

  進(jìn)入"數(shù)據(jù)庫主頁>對(duì)象瀏覽器"頁面,在左則選擇要?jiǎng)?chuàng)建主鍵的表。在右邊出現(xiàn)的表頁面中,點(diǎn)擊"約束條件"->"創(chuàng)建","約束條件類型"設(shè)置為"主鍵",其它自行填寫。

  附二:Oracle 配置參數(shù)查詢語句

SELECT NAME,VALUE  
FROM v$parameter  
WHERE NAME IN 
(’sga_max_size’,'db_cache_size’,  
’shared_pool_size’,’shared_pool_reserved_size’,'large_pool_size’,'java_pool_size’,  
‘db_block_size’,'db_block_buffers’,'log_buffer’,’sort_area_size’,’sort_area_retained_size’,  
‘hash_area_size’,’sessions’,'open_cursors’  
)ORDER BY NAME; 

  附三:其它參數(shù)設(shè)置命令

alter system set sga_max_size=700m scope=spfile;  
 
alter system set sga_target=700m scope=spfile;  

關(guān)鍵詞標(biāo)簽:Oracle,sql優(yōu)化

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門文章 Oracle中使用alter table來增加,刪除,修改列的語法 Oracle中使用alter table來增加,刪除,修改列的語法 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 誤刪Oracle數(shù)據(jù)庫實(shí)例的控制文件 誤刪Oracle數(shù)據(jù)庫實(shí)例的控制文件 為UNIX服務(wù)器設(shè)置Oracle全文檢索 為UNIX服務(wù)器設(shè)置Oracle全文檢索

相關(guān)下載

    人氣排行 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 Oracle中使用alter table來增加,刪除,修改列的語法 ORACLE SQL 判斷字符串是否為數(shù)字的語句 ORACLE和SQL語法區(qū)別歸納(1) oracle grant 授權(quán)語句 ORACLE修改IP地址后如何能夠使用 如何加速Oracle大批量數(shù)據(jù)處理 Oracle刪除表的幾種方法