国产探花免费观看_亚洲丰满少妇自慰呻吟_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表執行一遍查詢。在大量數據的情況下,顯然“第二種”查詢要比“第一種”查詢快得多。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 抚宁县| 启东市| 莒南县| 兴化市| 南乐县| 扎兰屯市| 黄大仙区| 甘洛县| 秦皇岛市| 封丘县| 孟村| 和龙市| 大城县| 金门县| 高青县| 日喀则市| 丰宁| 嘉义县| 昌吉市| 泽库县| 淳化县| 莆田市| 工布江达县| 天峻县| 凤山市| 大余县| 商洛市| 油尖旺区| 伊春市| 日土县| 彰化市| 丽水市| 镶黄旗| 台州市| 铜山县| 农安县| 云浮市| 佛坪县| 额尔古纳市| 富宁县| 股票|