當前位置:首頁 » 數據倉庫 » oracle資料庫查詢優化
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

oracle資料庫查詢優化

發布時間: 2023-06-05 17:25:09

❶ 優化資料庫大幅度提高Oracle的性能

幾個簡單的步驟大幅提高Oracle性能 我優化資料庫的三板斧

資料庫優化的討論可以說是一個永恆的主題 資深的Oracle優化人員通常會要求提出性能問題的人對資料庫做一個statspack 貼出資料庫配置等等 還有的人認為要抓出執行最慢的語句來進行優化 但實際情況是 提出疑問的人很可能根本不懂執行計劃 更不要說statspack了 而我認為 資料庫優化 應該首先從大的方面考慮 網路 伺服器硬體配置 操作系統配置 Oracle伺服器配置 數據結構組織 然後才是具體的調整 實際上網路 硬體等往往無法決定更換 應用程序一般也無法修改 因此應該著重從資料庫配置 數據結構上來下手 首先讓資料庫有一個良好的配置 然後再考慮具體優化某些過慢的語句 我在給我的用戶系統進行優化的過程中 總結了一些基本的 簡單易行的辦法來優化資料庫 算是我的三板斧 呵呵 不過請注意 這些不一定普遍使用 甚至有的會有副作用 但是對OLTP系統 基於成本的資料庫往往行之有效 不妨試試 (注 附件是Burleson寫的用來報告資料庫性能等信息的腳本 本文用到)

一.設置合適的SGA

常常有人抱怨伺服器硬體很好 但是Oracle就是很慢 很可能是內存分配不合理造成的 ( )假設內存有 M 這通常是小型應用 建議Oracle的SGA大約 M 其中 共享池(SHARED_POOL_SIZE)可以設置 M到 M 根據實際的用戶數 查詢等來定 數據塊緩沖區可以大致分配 M M i下需要設置DB_BLOCK_BUFFERS DB_BLOCK_BUFFER*DB_BLOCK_SIZE等於數據塊緩沖區大小 i 下的數據緩沖區可以用db_cache_size來直接分配

( )假設內存有 G Oracle 的SGA可以考慮分配 M 共享池分配 M到 M 數據緩沖區分配 M到 M

( )內存 G SGA可以考慮分配 G 共享池 M到 M 剩下的給數據塊緩沖區

( )內存 G以上 共享池 M到 M就足夠啦 再多也沒有太大幫助 (Biti_rainy有專述)數據緩沖區是盡可能的大 但是一定要注意兩個問題 一是要給操作系統和其他應用留夠內存 二是對於 位的操作系統 Oracle的SGA有 G的限制 有的 位操作系統上可以突破這個限制 方法還請看Biti的大作吧

二.分析表和索引 更改優化模式

Oracle默認優化模式是CHOOSE 在這種情況下 如果表沒有經過分析 經常導致查詢使用全表掃描 而不使用索引 這通常導致磁碟I/O太多 而導致查詢很慢 如果沒有使用執行計劃穩定性 則應該把表和索引都分析一下 這樣可能直接會使查詢速度大幅提升 分析表命令可以用ANALYZE TABLE 分析索引可以用ANALYZE INDEX命令 對於少於 萬的表 可以考慮分析整個表 對於很大的表 可以按百分比來分析 但是百分比不能過低 否則生成的統計信息可能不準確 可以通過DBA_TABLES的LAST_ANALYZED列來查看錶是否經過分析或分析時間 索引可以通過DBA_INDEXES的LAST_ANALYZED列

下面通過例子來說明分析前後的速度對比 (表CASE_GA_AJZLZ大約有 萬數據 有主鍵)首先在sqlPLUS中打開自動查詢執行計劃功能 (第一次要執行RDBMSADMINutlxplan sql來創建PLAN_TABLE這個表)

SQL> SET AUTOTRACE ON SQL>SET TIMING ON

通過SET AUTOTRACE ON 來查看語句的執行計劃 通過SET TIMING ON 來查看語句運行時間

SQL> select count(*) from CASE_GA_AJZLZ; COUNT(*) 已用時間: : : Execution Plan SELECT STATEMENT Optimizer=CHOOSE SORT (AGGREGATE) TABLE ACCESS (FULL) OF CASE_GA_AJZLZ ……………………

請注意上面分析中的TABLE ACCESS(FULL) 這說明該語句執行了全表掃描 而且查詢使用了 秒 這時表還沒有經過分析 下面我們來對該表進行分析

SQL> *** yze table CASE_GA_AJZLZ pute statistics;

表已分析 已用時間: : : 然後再來查詢

SQL> select count(*) from CASE_GA_AJZLZ; COUNT(*) 已用時間: : : Execution Plan SELECT STATEMENT Optimizer=FIRST_ROWS (Cost= Card= ) SORT (AGGREGATE) INDEX (FAST FULL SCAN) OF PK_AJZLZ (UNIQUE) (Cost= Card= ) …………………………

請注意 這次時間僅僅用了 秒!這要歸功於INDEX(FAST FULL SCAN) 通過分析表 查詢使用了PK_AJZLZ索引 磁碟I/O大幅減少 速度也大幅提升!下面的實用語句可以

用來生成分析某個用戶的所有表和索引 假設用戶是GAXZUSR

SQL> set pagesize SQL> spool d: *** yze_tables sql; SQL> select *** yze table ||owner|| ||table_name|| pute statistics; from dba_tables where owner= GAXZUSR ; SQL> spool off SQL> spool spool d: *** yze_indexes sql; SQL> select *** yze index ||owner|| ||index_name|| pute statistics; from dba_indexes where owner= GAXZUSR ; SQL> spool off SQL> @d: *** yze_tables sql SQL> @d: *** yze_indexes sql

解釋 上面的語句生成了兩個sql文件 分別分析全部的GAXZUSR的表和索引 如果需要按照百分比來分析表 可以修改一下腳本 通過上面的步驟 我們就完成了對表和索引的分析 可以測試一下速度的改進啦 建議定期運行上面的語句 尤其是數據經過大量更新

當然 也可以通過dbms_stats來分析表和索引 更方便一些 但是我仍然習慣上面的方法 因為成功與否會直接提示出來

另外 我們可以將優化模式進行修改 optimizer_mode值可以是RULE CHOOSE FIRST_ROWS和ALL_ROWS 對於OLTP系統 可以改成FIRST_ROWS 來要求查詢盡快返回結果 這樣即使不用分析 在一般情況下也可以提高查詢性能 但是表和索引經過分析後有助於找到最合適的執行計劃

三.設置cursor_sharing=FORCE 或SIMILAR

這種方法是 i才開始有的 oracle 不支持 通過設置該參數 可以強制共享只有文字不同的語句解釋計劃 例如下面兩條語句可以共享

SQL> SELECT * FROM MYTABLE WHERE NAME= tom SQL> SELECT * FROM MYTABLE WHERE NAME= turner

這個方法可以大幅降低緩沖區利用率低的問題 避免語句重新解釋 通過這個功能 可以很大程度上解決硬解析帶來的性能下降的問題 個人感覺可根據系統的實際情況 決定是否將該參數改成FORCE 該參數默認是exact 不過一定要注意 修改之前 必須先給ORACLE打補丁 否則改之後oracle會佔用 %的CPU 無法使用 對於ORACLE i 可以設置成SIMILAR 這個設置綜合了FORCE和EXACT的優點 不過請慎用這個功能 這個參數也可能帶來很大的負面影響!

四.將常用的小表 索引釘在數據緩存KEEP池中

內存上數據讀取速度遠遠比硬碟中讀取要快 據稱 內存中數據讀的速度是硬碟的 倍!如果資源比較豐富 把常用的小的 而且經常進行全表掃描的表給釘內存中 當然是在好不過了 可以簡單的通過ALTER TABLE tablename CACHE來實現 在ORACLE i之後可以使用ALTER TABLE table STORAGE(BUFFER_POOL KEEP) 一般來說 可以考慮把 數據塊之內的表放在keep池中 當然要根據內存大小等因素來定 關於如何查出那些表或索引符合條件 可以使用本文提供的access sql和access_report sql 這兩個腳本是著名的Oracle專家 Burleson寫的 你也可以在讀懂了情況下根據實際情況調整一下腳本 對於索引 可以通過ALTER INDEX indexname STORAGE(BUFFER_POOL KEEP)來釘在KEEP池中

將表定在KEEP池中需要做一些准備工作 對於ORACLE i 需要設置DB_KEEP_CACHE_SIZE 對於 i 需要設置buffer_pool_keep 在 i中 還要修改db_block_lru_latches 該參數默認是 無法使用buffer_pool_keep 該參數應該比 * *CPU數量少 但是要大於 才能設置DB_KEEP_CACHE_BUFFER buffer_pool_keep從db_block_buffers中分配 因此也要小於db_block_buffers 設置好這些參數後 就可以把常用對象永久釘在內存里

五.設置optimizer_max_permutations

對於多表連接查詢 如果採用基於成本優化(CBO) ORACLE會計算出很多種運行方案

從中選擇出最優方案 這個參數就是設置oracle究竟從多少種方案來選擇最優 如果設置太大 那麼計算最優方案過程也是時間比較長的 Oracle 和 i默認是 建議改成 對於 i 已經默認是 了

六.調整排序參數

( ) SORT_AREA_SIZE:默認的用來排序的SORT_AREA_SIZE大小是 K 通常顯得有點小 一般可以考慮設置成 M( ) 這個參數不能設置過大 因為每個連接都要分配同樣的排序內存

lishixin/Article/program/Oracle/201311/18879

❷ Oracle資料庫系統性能優化策略

一個資料庫系統的生命周期可以分成設計 開發和成品三個階段 在設計階段進行資料庫性能優化的成本最低 收益最大 在成品階段進行資料庫性能優化的成本最高 收益最小 資料庫的優化可以通過對網路 硬體 操作系統 資料庫參數和應用程序的優化來進行 最常見的優化手段就是對硬體的升級 據統計 對網路辯敬 硬體 操作系統 資料庫參數進行優化所獲得的性能提升 全部加起來只佔資料庫系統性能提升的 %左右 其餘的 %系統性能提升來自對應用程序的優化 許多優化專家認為 對應用程序的優化可以得到 %的系統性能的提升

一 資料庫性能的優化

資料庫設計是應用程序設計的基礎 其性能直接影響應用程序的性能 資料庫性能包括存儲空間需求量的大小和查詢響應時間的長短兩個方面 為了優化資料庫性能 需要對資料庫中的表進行規范化 規范化的範式可分為第一範式 第二範式 第三範式 BCNF範式 第四範式和第五範式 一般來說 邏輯資料庫設計會滿足規范化的前 級標准 但由於滿足第三範式的表結構容易維護且基本滿足實際應用的要求 因此 實際應用中一般都按照第三範式的標准進行規范化 但是 規范化也有缺點 由於將一個表拆分成為多個表 在查詢時需要多表連接 降低了查詢速度

由於規范化有可能導致查詢速度慢的缺點 考慮到一些應用需要較快的響應速度 在設計表時應同時考慮對某些表進行反規范化 反規范化可以採用以下幾種方法

分割表

分割表包括水平分割和垂直分割

水平分割是按照行將一個表分割為多個表 這可以提高每個表的查詢速度 但查詢 更新時要選擇不同的表 統計時要匯總多個表 因此應用程序會更復雜

垂直分割是對於一個列很多的表 若某些列的訪問頻率遠遠高於其它列 就可以將主鍵和這些列作為一個表 將主鍵和其它列作為另外一個表 通過減少列的寬度 增加了絕山每個數據頁的行數 一次I/O就可以掃描更多的行 從而提高了訪問每一個表的速度 但是由於造成了多表連接 所以應該在同時查詢或更新不同分割表中的列的情況比較少的情況下使用

保留冗餘列

當兩個或多個表在查詢中經常需要連接時 可以在其中一個表上增加若干冗餘的列 以避免表之間的連接過於頻繁 由於對冗餘列的更新操作必須對多個表同步進行 所以一般在冗餘列的數據不經常變動的情況下使用

增加派生列

派生列是由表中的其它多個列計算所得 增加派生列可以減少統計運算 在數據匯總時可以大大縮短運算時間

二 應用程序性能的優化

應用程序的優化通常可分為兩個方面 源代碼和SQL語句 由於涉及到對程序邏輯的改變 源代碼的優化在時間成本和風險上代價很高 而對資料庫系統性能的提升收效有限 因此應用程序的優化應著重在SQL語句的優化 對於海量數據 劣質SQL語句和優質SQL語句之間的速度差別可以達到上百倍 可見對於一個系統不是簡單地能實現其功能就行 而是要寫出高質量的SQL語句 提高系統的可用性

下面就某些SQL語句的where子句編寫中需要注意的問題作詳細介紹 在這些where子句中 即使某些列存在索引 但是由於編寫了劣質的SQL 系統在運行該SQL語句時也不能使用該索引 而同樣使用全表掃描 這就造成了響應速度的極大降低

IS NULL 與 IS NOT NULL

攜宏慎不能用null作索引 任何包含null值的列都將不會被包含在索引中 即使索引有多列的情況下 只要這些列中有一列含有null 該列就會從索引中排除 也就是說如果某列存在空值 即使對該列建索引也不會提高性能

任何在where子句中使用is null或is not null的語句優化器是不允許使用索引的

聯接列

對於有聯接的列 即使最後的聯接值為一個靜態值 優化器不會使用索引的 例如 假定有一個職工表(employee) 對於一個職工的姓和名分成兩列存放(FIRST_NAME和LAST_NAME) 現在要查詢一個叫喬治?布希(Gee Bush)的職工 下面是一個採用聯接查詢的SQL語句

select * from employee where first_name|| ||last_name = Gee Bush

上面這條語句完全可以查詢出是否有Gee Bush這個員工 但是這里需要注意 系統優化器對基於last_name創建的索引沒有使用

當採用下面這種SQL語句的編寫 Oracle系統就可以採用基於last_name創建的索引

Select * From employee where first_name = Gee and last_name = Bush

遇到下面這種情況又如何處理呢?如果一個變數(name)中存放著Gee Bush這個員工的姓名 對於這種情況我們又如何避免全程遍歷使用索引呢?可以使用一個函數 將變數name中的姓和名分開就可以了 但是有一點需要注意 這個函數是不能作用在索引列上 下面是SQL查詢腳本

select * from employee where first_name = SUBSTR( &&name INSTR( &&name ) )

and last_name = SUBSTR( &&name INSTR( &&name )+ )

帶通配符(%)的like語句

同樣以上面的例子來看這種情況 目前的需求是這樣的 要求在職工表中查詢名字中包含Bush的人 可以採用如下的查詢SQL語句

select * from employee where last_name like %Bush%

這里由於通配符(%)在搜尋詞首出現 所以Oracle系統不使用last_name的索引 在很多情況下可能無法避免這種情況 但是一定要心中有底 通配符如此使用會降低查詢速度 然而當通配符出現在字元串其他位置時 優化器就能利用索引 例如 在下面的查詢中索引得到了使用

select * from employee where last_name like c%

Order by語句

Order by語句決定了Oracle如何將返回的查詢結果排序 Order by語句對要排序的列沒有什麼特別的限制 也可以將函數加入列中(象聯接或者附加等) 任何在Order by語句的非索引項或者有計算表達式都將降低查詢速度

仔細檢查order by語句以找出非索引項或者表達式 它們會降低性能 解決這個問題的辦法就是重寫order by語句以使用索引 也可以為所使用的列建立另外一個索引 同時應絕對避免在order by子句中使用表達式

NOT

我們在查詢時經常在where子句使用一些邏輯表達式 如大於 小於 等於以及不等於等等 也可以使用and(與) or(或)以及not(非) NOT可用來對任何邏輯運算符號取反 下面是一個NOT子句的例子

…… where not (status = VALID )

如果要使用NOT 則應在取反的短語前面加上括弧 並在短語前面加上NOT運算符 NOT運算符包含在另外一個邏輯運算符中 這就是不等於(<>)運算符 換句話說 即使不在查詢where子句中顯式地加入NOT詞 NOT仍在運算符中 見下例

…… where status <> INVALID

再看下面這個例子

select * from employee wheresalary<>

對這個查詢 可以改寫為不使用NOT的語句

select * from employee wheresalary< or salary>

雖然這兩種查詢的結果一樣 但是第二種查詢方案會比第一種查詢方案更快些 第二種查詢允許Oracle對salary列使用索引 而第一種查詢則不能使用索引

IN和EXISTS

有時候會將一列和一系列值相比較 最簡單的辦法就是在where子句中使用子查詢 在where子句中可以使用兩種格式的子查詢

第一種格式是使用IN操作符 …… where column in(select * from …… where ……)

第二種格式是使用EXIST操作符 …… where exists (select X from ……where ……)

絕大多數人會使用第一種格式 因為它比較容易編寫 而實際上第二種格式要遠比第一種格式的效率高 在Oracle中可以將幾乎所有的IN操作符子查詢改寫為使用EXISTS的子查詢

第二種格式中 子查詢以 select X 開始 運用EXISTS子句不管子查詢從表中抽取什麼數據它只查看where子句 這樣優化器就不必遍歷整個表而僅根據索引就可完成工作(這里假定在where語句中使用的列存在索引) 相對於IN子句來說 EXISTS使用相連子查詢 構造起來要比IN子查詢困難一些

通過使用EXISTS Oracle系統會首先檢查主查詢 然後運行子查詢直到找到第一個匹配項 這就節省了時間 Oracle系統在執行IN子查詢時 首先執行子查詢 並將獲得的結果列表存放在一個加了索引的臨時表中 在執行子查詢之前 系統先將主查詢掛起 待子查詢執行完畢 存放在臨時表中以後再執行主查詢 這也就是使用EXISTS比使用IN通常查詢速度快的原因

同時應盡可能使用NOT EXISTS來代替NOT IN 盡管二者都使用了NOT(不能使用索引而降低速度) 但NOT EXISTS要比NOT IN查詢效率更高

lishixin/Article/program/Oracle/201311/17060

❸ 【基於ORACLE資料庫的SQL語句優化分析】 資料庫查詢語句的優化

【摘要】隨著資料庫應用范圍及規模的不斷擴大,資料庫的性能問題逐漸顯現,優化資料庫有助於維持系統的穩定性以及運行的高效性。本文主要依據筆者在實際工作中的精坦敏拍英,對SQL語句優化的目的、SQL語句優化技術及原則進行全面分析和闡述。
【關鍵詞】ORACLE資料庫;SQL語句;優化
1前言
隨著現代化信息技術的迅猛發展,互聯網應用的日益普及,資料庫技術的影響力越來越大。作為信息系統管理的核心,資料庫的主要操作就是查詢,資料庫的應用效率在很大程度上是由查詢速度決定的,特別是對於規模較大的資料庫而言,查詢速度十分關鍵。查詢速度在SQL語句中佔有很大比重,所以,通過對查詢語句進行優化有助於促進應用系統性能及效率的進一步提升。
2SQL語句優化分析
2.1SQL語句優化的目的
對於一個資料庫而言,在確保設計無誤的前提下,要想避免出現性能問題必須確保其擁有合理的SQL語句拿喚結構。最簡單的資料庫尋找數據路徑是對SQL語句進行調整,ORACLE資料庫性能提升的主要途徑就是對SQL語句進行適當的調整。從本質上講,SQL語句優化就是確保所使用的語句可以被優化器識別,對索引進行有效利用以便控製表掃描的I/O次數,有效防止出現表搜索。用高性能的SQL語句替代低性能的SQL語句,確定最佳的數據查找路徑,盡可能使CPU時間與I/O時間保持平衡是進行優化的主要目的。在對SQL語句進行優化的過程中,以系統需求為依據確定最有可能實現性能提升的語句並進行優化。
2.2SQL語句優化技術及原則
當數據量積累到一定程度之後,對於資料庫全表SQL語句進行一次掃描,若查詢策略較好,一般只用幾秒鍾,但如果SQL語句性能較低,就需要用幾分鍾甚至更多時間。從這點不難看出,SQL語句性能對於查詢速度具有極大的影響,所以,對於應用系統而言,不僅能滿足功能的實現,還要保證SQL語句的質量。
(1)採取適宜的索引。為達到優化查詢的目的,一項重要工作就是確定相適應的索引,並嚴格依照原則加以使用,與此同時,為有效控制I/O競爭,不可以在同一個磁碟中同時建立索引和用戶表空間。
語句1:SELECT CUS_NO, CUS_NAME FROM CUSTOMER WHERE CUS_NO NOT IN
(SELECT CUS_NO FROM SERVICE);
語句2: SELECT CUS_NO, CUS_NAME FROM CUSTOMER WHERE NOT EXISTS
(SELECT * FROM SERVICE WHERE SERVICE.CUS_NO=CUSTOMER.CUS_NO);
上述兩個語句可以達到一致的查詢結果,對二者進行對比,當執行語句1時,由於ORACLE未利用CUSTOMER 表上CUS_NO索引,所以就會掃描整表,在執行語句2的過讓羨程中,ORACLE所掃描的只是CUSTOMER 表子查詢中的聯合查詢,並且使用了CUS_NO索引,因此,在執行效率方面明顯優於前者。
(2)避免在SELECT子句中出現「*」。ORACLE在進行解析時,需要按照一定順序對「*」進行轉換,該項轉換工作的進行需要對資料庫的數據字典進行查詢,勢必需要花費較多的時間,這樣就會導致較低的效率,所以,要避免在SELECT子句中出現「*」。
(3)如果必要可以利用COMMIT提交事務。ORACLE能夠自動提交DDL語句,而諸如DML等類型的語句的提交則是通過手動方式或者回滾事務實現的。在編寫應用程序的過程中,在操作諸如insert、delete以及update 等較為復雜的語境的時候,利用COMMIT提交事務可以講會話中持有的鎖加以釋放,將存在於緩存中的未經修改的數據塊進行清除,進而將系統資源予以釋放,促進系統性能的進一步提升,因此,如果有必要,可以利用COMMIT對相關事務進行提交。
(4)聯合查詢連接順序的確定。如果查詢操作涉及到多個表,基礎表應當是交叉表,所謂交叉表具體是指被其他表引用的表。連接執行效果在很大程度上受到FROM語句中表的順序的影響,對於FROM中所包含的表,ORACLE解析器進行處理的順序是由右至左,SQL語句中所選擇的基礎表會因優化器的不同而有所區別,在使用CBO的情況下,優化器會對SQL語句中各個表的物理大小以及索引狀態進行檢查,在此基礎上確定一個花費最小的執行路徑;在使用RBO的情況下,如果全部的連接條件均有索引與之相對應,那麼,FROM子句中位置最後面的表就是基礎表。
(5)IN用EXISTS取代。在對數個基礎表查詢過程中,一般需要進行表的連接。因為利用IN的子查詢過程中,ORACLE的掃描對象是全表,因此,出於提高查詢效率目的的考慮,應當將IN用EXISTS取代。
(6)在索引列中不使用計算。當通過對函數進行引用在WHERE子句中進行計算的時候,假如索引列只是函數的一部分,優化器就會針對全表進行掃描,而不會使用索引,所以,在索引列中不能使用函數。
3結語
綜上所述,隨著現代化信息技術的迅猛發展,互聯網應用的日益普及,資料庫技術的影響力越來越大。在信息量迅速激增的形勢下,資料庫優化調整成為當前所面臨的一大關鍵性問題,特別是對規模較大的資料庫而言,及時進行優化的意義更加倍重大。對於資料庫的運行性能而言,最主要的影響因素主要體現在以下幾點:資料庫系統架構的設計是否合理,資源配置是否科學以及SQL語句編寫效率等。筆者從事的是電信企業的運營分析工作,每天都要從資料庫取各種數據,可以說是離不開資料庫,所以在實踐中,我覺得嚴格遵守SQL語句優化原則及方法,並在實踐中及時總結經驗教訓,可以實現對系統響應時間的有效控制,促進運行效率的提升。
參考文獻
[1] 許開宇,胡文驊. 如何提高ORACLE資料庫應用程序的性能[J]. 計算機應用與軟體. 2002(10)
[2] 鄭耀,吳建嵐. 基於Oracle資料庫的語句優化策略[J]. 信息與電腦(理論版). 2011(07)
[3] 高攀,施蔚然. 基於Oracle資料庫的SQL語句優化[J]. 電腦編程技巧與維護. 2010(22)
[4] 鍾小權,葉猛. Oracle資料庫的SQL語句優化[J]. 計算機與現代化. 2011(03)
作者簡介:
王勇軍,男,(1981.1-),吉林通化人,就職於中國聯合網路通信有限公司長春市分公司,通信工程師,本科,研究方向:SQL使用
(作者單位:中國聯合網路通信有限公司長春市分公司)

❹ oracle 資料庫很慢,應該如何優化

1、是這樣的。
2、這個說不好,我沒這么做過。你手邊應該有oralce的全套電子文檔吧。關鍵是你要找對系統表或者視圖。我記得索引的系統視圖不是這個。
3、這些與你要做的有關系嗎?別像沒頭蒼蠅一樣瞎撞了。
4、不用刪表,如果你連基本的語句命令都不懂,那隻能看書了。
5、慢的原因有好多,逐步排除吧,等找到真正原因再說。急沒用的。
6、默認情況下,是會建到用戶的默認表空間的。
7、這個看你的維護需要。最起碼先弄明白你的庫是怎麼回事再說吧。就從這些問題看,你根本就是門外漢,連庫是怎麼回事都沒弄明白。