国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

常規SQL語句優化

2019-11-08 20:46:12
字體:
來源:轉載
供稿:網友

關于SQL優化

 

1.建議不用“*”來代替所有列名

SELECT語句中可以用“*”來列出某個表的所有列名,但是這樣的寫法對Oracle系統來說會存在解析的動態問題。Oracle系統會通過查詢數據字典來將“*”轉換成表的所有列名,這自然會消耗系統時間。建議用戶在寫SELECT語句時,采用與訪問表有關的實際列名。

2.用TRUNCATE代替DELETE

當使用DELETE刪除表中的數據行時,Oracle會使用撤銷表空間(UNDO TABLESPACE)來存放恢復的信息。在這期間,如果用戶沒有發出COMMIT語句,而是發出ROLLBACK語句,Oracle系統會將數據恢復到刪除之前的狀態。當用戶使用TRUNCATE語句對表的數據進行刪除時,系統不會將被刪除的數據寫到回滾段(或撤銷表空間)中,速度當然要快得多。所以當希望對表或者簇中的所有行全部刪除時,采用TRUNCATE命令更加有效,其語法格式如下:

      Truncate [table | cluster] schema.[table_name] [cluster_name] [drop | reuse storage]

3.在確保完整性的情況下多用COMMIT語句

在PL/SQL塊中,經常將幾個相互聯系的DML語句寫在一個BEGIN…END塊中,建議在每個塊的END前面使用COMMIT語句,這樣就可以實現對DML語句的及時提交,同時也釋放事務所占用的資源。

COMMIT所釋放的資源如下。

(1)回滾段上用于恢復數據的信息,撤銷表空間也只做短暫的保留

(2)被程序語句獲得的鎖

(3)redo log buffer中的空間

(4)Oracle為管理上述資源的內部花費

4.盡量減少表的查詢次數

 在含有子查詢的SQL語句中,要特別注意減少對表的查詢,如下面的兩段代碼。

      第一種:低效率的SQL查詢語句:

SQL> select empno,ename,job from emp

   2  where deptno in (select deptno from dept where loc = 'BEIJING')

   3  or deptno in (select deptno from dept where loc = 'NEW YORK');

      第二種:對上面的代碼進行適當修改,高效率的SQL查詢語句如下:

SQL> select empno,ename,job from emp

    2  where deptno in (select deptno from dept where loc = 'BEIJING' or loc = 'NEW YORK');

      在“第一種”查詢語句中,要對dept表執行兩遍的查詢,而在“第二種”查詢中,僅對dept表執行一遍查詢。在大量數據的情況下,顯然“第二種”查詢要比“第一種”查詢快得多。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 富裕县| 汾阳市| 漳浦县| 苗栗县| 五家渠市| 特克斯县| 集贤县| 弥渡县| 启东市| 黔东| 霍林郭勒市| 抚宁县| 谷城县| 独山县| 治县。| 咸丰县| 瑞安市| 乃东县| 阿克| 梨树县| 通城县| 哈巴河县| 固安县| 化州市| 祁阳县| 麻江县| 陇南市| 湟源县| 遂宁市| 子长县| 土默特左旗| 股票| 丘北县| 平和县| 巨野县| 西盟| 仲巴县| 本溪| 饶阳县| 三台县| 苍山县|