時(shí)間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)
網(wǎng)站速度變慢時(shí),你會考慮到什么解決方法?筆者最近公司網(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)視器>會話>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ù)庫主頁>對象瀏覽器"頁面,在右邊偏上方有一個(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)建索引。只對主鍵進(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ù)庫主頁>對象瀏覽器"頁面,在左則選擇要創(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)閱讀
熱門文章 Oracle中使用alter table來增加,刪除,修改列的語法 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 誤刪Oracle數(shù)據(jù)庫實(shí)例的控制文件 為UNIX服務(wù)器設(shè)置Oracle全文檢索
人氣排行 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 Oracle中使用alter table來增加,刪除,修改列的語法 ORACLE SQL 判斷字符串是否為數(shù)字的語句 ORACLE和SQL語法區(qū)別歸納(1) oracle grant 授權(quán)語句 ORACLE修改IP地址后如何能夠使用 如何加速Oracle大批量數(shù)據(jù)處理 Oracle刪除表的幾種方法