如何查看Oracle中sql語句的執行時間
通過Oracle執行計劃可以看到SQL的執行時間。
EXPLAIN PLAN FOR
SELECT * FROM table;
SELECT * FROM TABLE(DBMS_*Y);
SQL>set timing on --顯示執行時間
SQL>set autorace on ?C顯示執行計劃
SQL>set autorace on ?C顯示執行計劃
SQL>set autotrace traceonly ?C只顯示執行計劃即不顯示查詢出來的數據
設置完畢后執行SQL語句就會顯示執行時間。
oracle sql 語句執行順序
where 里面條件 and 是先執行 and 前面 還是后面條件
這個其實和你寫的順序不大,這個先后順序,是數據庫來根據表/索引的信息來決定的。
例如一個 學生表, 有學號,姓名,性別
其中 學號是主鍵, 姓名上面有個索引。
找 名字叫 強妹 的女生:
SELECT * FROM 學生 WHERE 姓名='強妹' AND 性別 = '女'
與
SELECT * FROM 學生 WHERE 性別 = '女' AND 姓名='強妹'
數據庫在處理 SQL 以前,都會去分析, 發現 查詢的條件中, 姓名上面有索引,而性別上面沒有。 那么優先根據 姓名的條件, 去檢索,然后再去把通過索引得到的數據,去篩選 性別=女的
比如表里面共有10000行。姓名叫 '強妹' 的只有一個。
那么通過索引,一步就定位到那一行。
然后再判斷這一行數據的 性別字段, 是不是 = '女'
假如 姓名/性別 都沒有索引呢?
那就是執行 全表掃描。
不分先后。
什么意思呢?
就是假如 表里面10000行數據。
那就是從第一行開始, 查看 姓名與性別 條件。 滿足的返回。 不滿足的丟棄。 直到100行都處理完。
并不是一口氣把所有的數據,都放到內存里面,然后 姓名判斷一次, 去掉部分, 性別判斷一次,再去掉部分。
怎么在Oracle中寫執行sql的sql語句
可以使用 execute immediate
--FYI
--execute immediate不支持多行返回,如果需要可新建臨時表
declare
v_source_sql varchar2(1000);
v_union_sql varchar2(1000);
begin
select column_name into v_source_sql from table_name ;--get source sql
v_union_sql='select * from tablename2,('||v_source_sql ||') h where 。。';--sql str
-- 之前先創建好所需字段的temp_table
execute immediate('insert into temp_table '||v_union_sql );
--在臨時表中就是你所需要的數據。
exception 。
--如果只是需要返回單行數據,則可將execute immediate嵌入在sql中使用
--execute immediate str into parameter1 ,parmeter2。--返回參數
where column=:parameter。.條件參數
--
-我說的很仔細吧:) 今天心情好
end;
Oracle中怎樣一次執行多條sql語句
有時我們需要一次性執行多條sql語句,而用來更新的sql是根據實際情況用代碼拼出來的
解決方案是把sql拼成下面這種形式:
begin
update TB_VG set seq = 1, vessel_id = 'Jin14', vessel_type = 'TRACK' where batch_number = '20837' and train_id = '0233086';
update TB_VG set seq = 2, vessel_id = 'Jin14', vessel_type = 'TRACK' where batch_number = '20992' and train_id = '0233110';
end;
總結如下:
以begin開始,以end;結尾(end后的分號不能省),中間的每個sql語句要以分號;結尾
在實際編碼中,發現即使這樣也會有錯誤發生,把sql語句中的換行符替換成空格就可以了
比較穩妥的編碼方式是:
1、以正常的方式編寫sql,根據閱讀與編寫的需要,中間肯定會有換行符
2、在執行之前進行替換:strSql = *e("r\n", " ").Replace('\n', ' ');
如果不采用這種方式,可能的異常有:
ORA-00933: SQL 命令未正確結束(如果sql沒有以分號結尾)
ORA-00911: 無效字符(如果未加begin 和 end)
ORA-06550: 第x行, 第xxx列: PLS-00103: 出現符號 "end-of-file"在需要下列之一時:。。(如果end后面沒有;分號)
ORA-06550: 第x行, 第xxx列: PLS-00103: 出現符號 ""在需要下列之一時:。。(語句之間有換行符)
Oracle中優化SQL語句執行的原則是什么
1。
已經檢驗的語句和已在共享池中的語句之間要完全一樣 2。變量名稱盡量一致 3。
合理使用外聯接 4。少用多層嵌套 5。
多用并發 語句的優化步驟一般有: 1。調整sga區,使得sga區的是用最優。
2。sql語句本身的優化,工具有explain,sql trace等 3。
數據庫結構調整 4。項目結構調整 寫語句的經驗: 1。
對于大表的查詢使用索引 2、少用in,exist等 3、使用集合運算 1.對于大表查詢中的列應盡量避免進行諸如 To_char,to_date,to_number 等轉換 2.有索引的盡量用索引,有用到索引的條件寫在前面 如有可能和有必要就建立一些索引 3.盡量避免進行全表掃描,限制條件盡可能多,以便更快 搜索到要查詢的數據 如何讓你的SQL運行得更快 交通銀行長春分行電腦部 任亮 ---- 人們在使用SQL時往往會陷入一個誤區,即太關注于所得的結果是否正確,而忽略了不同的實現方法之間可能存在的性能差異,這種性能差異在大型的或是復雜的數據庫環境中(如聯機事務處理OLTP或決策支持系統DSS)中表現得尤為明顯。筆者在工作實踐中發現,不良的SQL往往來自于不恰當的索引設計、不充份的連接條件和不可優化的where子句。
在對它們進行適當的優化后,其運行速度有了明顯地提高!。
轉載請注明出處華閱文章網 » oraclesql語句執行