時(shí)間:2015/6/28來(lái)源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評(píng)論(0)
網(wǎng)站速度變慢時(shí),你會(huì)考慮到什么解決方法?筆者最近公司網(wǎng)站的速度一起很不理想,文章頁(yè)面基本都要 10s 以上才能打開(kāi)。數(shù)據(jù)庫(kù)用的是 oracle 10g Express Edtion,存放文章的表超過(guò)了 10 萬(wàn)數(shù)據(jù)量,類(lèi)似執(zhí)行一個(gè) select count(1) from res where class_id=1 這樣的語(yǔ)句就經(jīng)常在 10s 以上。然而,今天我在 class_id 上加了一個(gè)索引,這條語(yǔ)句的執(zhí)行時(shí)間就幾乎變成了 0s。效果之顯著,完全出乎我的預(yù)料。下面是Oracle 10g sql優(yōu)化相關(guān)的總結(jié):
1. 監(jiān)控 select 語(yǔ)句
。"數(shù)據(jù)庫(kù)主頁(yè)"從開(kāi)始菜單里"Oracle Database 10g Express Edition"的"轉(zhuǎn)至數(shù)據(jù)庫(kù)主頁(yè)"進(jìn)入)
進(jìn)入"數(shù)據(jù)庫(kù)主頁(yè)>管理>數(shù)據(jù)庫(kù)監(jiān)視器>會(huì)話(huà)>SQL"頁(yè)面,在"搜索"里輸入"select",點(diǎn)擊"開(kāi)始"。這樣就可以看到最近執(zhí)行的 select 語(yǔ)句。點(diǎn)擊"SQL"列里的 SQL 語(yǔ)句鏈接,查看執(zhí)行情況。其中,"CPU時(shí)間"即為執(zhí)行所用的時(shí)間,"已處理的行數(shù)"為查詢(xún)結(jié)果的行數(shù)。下面的"SQL文本"是 SQL 語(yǔ)句的完整內(nèi)容,"索引"區(qū)域顯示該查詢(xún)使用了哪個(gè)索引。
找到"CUP時(shí)間"超過(guò) 1 秒的查詢(xún),看是否需要添加索引。
2. 添加索引
進(jìn)入"數(shù)據(jù)庫(kù)主頁(yè)>對(duì)象瀏覽器"頁(yè)面,在右邊偏上方有一個(gè)"創(chuàng)建"按鈕。點(diǎn)擊"創(chuàng)建" 按鈕,在出現(xiàn)的菜單里選擇"索引",然后輸入"表名","索引類(lèi)型"使用"常規(guī)",再點(diǎn)擊"下一步"。
在新出現(xiàn)的頁(yè)面,輸入索引的名稱(chēng)和索引列。如果是不唯一的字段,最好將"單性值"設(shè)置為唯一,可能有助提高檢索速度。再點(diǎn)擊"下一步",點(diǎn)擊"完成"按鈕。
照我的理解,創(chuàng)建索引時(shí)選擇什么索引列,應(yīng)該是由 select 語(yǔ)句的 where 部分決定的。比如 where id=1 ,只需選擇 id 一個(gè)索引列;如果是 where id=1 and name=2 ,則需要選擇 id 和 name 兩個(gè)索引列來(lái)創(chuàng)建索引。只對(duì)主鍵進(jìn)行索引,因?yàn)槭俏ㄒ坏,所以?quot;單性值"設(shè)置為"唯一"。
數(shù)據(jù)量比較大的表,都應(yīng)在其主鍵上創(chuàng)建一個(gè)索引,其它需要的另加。
order by 語(yǔ)句里的字段,一般無(wú)法使用索引,所以,盡量在 order by 之前將查詢(xún)結(jié)果的行數(shù)縮到最少。
要提高 order by 語(yǔ)句的執(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ù)庫(kù)主頁(yè)>對(duì)象瀏覽器"頁(yè)面,在左則選擇要?jiǎng)?chuàng)建主鍵的表。在右邊出現(xiàn)的表頁(yè)面中,點(diǎn)擊"約束條件"->"創(chuàng)建","約束條件類(lèi)型"設(shè)置為"主鍵",其它自行填寫(xiě)。
附二:Oracle 配置參數(shù)查詢(xún)語(yǔ)句
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)閱讀
熱門(mén)文章 Oracle中使用alter table來(lái)增加,刪除,修改列oracle中使用SQL語(yǔ)句修改字段類(lèi)型-oracle修使用低權(quán)限Oracle數(shù)據(jù)庫(kù)賬戶(hù)得到管理員權(quán)限Oracle對(duì)user的訪(fǎng)問(wèn)控制
人氣排行 ORACLE SQL 判斷字符串是否為數(shù)字的語(yǔ)句Oracle中使用alter table來(lái)增加,刪除,修改列的語(yǔ)法ORACLE和SQL語(yǔ)法區(qū)別歸納(1)oracle grant 授權(quán)語(yǔ)句如何加速Oracle大批量數(shù)據(jù)處理Oracle刪除表的幾種方法ORACLE修改IP地址后如何能夠使用Oracle 10g創(chuàng)建表空間和用戶(hù)并指定權(quán)限