亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

數據庫SQL語句書寫注意事項

系統 1865 0

1. 從多個表中選擇記錄時:(表名順序)

執行順序為從右往左,即表記錄數少的放到右邊,即最為基礎表。如果有三個以上的表做連接查詢,我們將交叉表作為基礎表(即被其他表應用的表,即關系表)

2. WHERE 子句中的連接順序.

ORACLE按照自左向右的順序執行,即那些可以過濾掉最大數量記錄的條件必須寫在WHERE子句的最右邊,即末尾。

對于SQL Server有兩種說法,第一種:不用考慮順序,SQLServer會自動執行過濾數據較多的條件;第二種:從左向右的執行順序。 3.SELECT 子句中一定避免使用 ‘ * ‘:

注意一定別是用* ,巨耗時。

4. 刪除重復記錄:

避免表中出現重復記錄。

Oracle中最高效的刪除重復記錄方法的例子: DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID) FROM EMP X WHERE X.EMP_NO = E.EMP_NO); 5 盡量多使用COMMIT:

只要有可能,在程序中盡量多使用COMMIT, 以便及時釋放資源,提高性能。 COMMIT所釋放的資源:如下 第一,回滾段上用于恢復數據的信息.第二,被程序語句獲得的鎖第三,redo log buffer 中的空間第四,ORACLE為治理上述3種資源中的內部花費

6 用Where子句替換HAVING子句: 避免使用HAVING子句, HAVING要檢索所有記錄后,才進行過濾,這個處理需要排序,總計等操作. 假如能通過WHERE子句限制記錄的數目,那就能減少這方面的開銷. 7 使用表的別名(Alias): 當在SQL語句中連接多個表時,使用表的別名并把別名前綴于每個Column上.這樣一來,就可以減少解析的時間并減少那些由Column歧義引起的語法錯誤. 8 用EXISTS替代IN、用NOT EXISTS替代NOT IN: 使用EXISTS(或NOT EXISTS)通常將提高查詢的效率.無論在哪種情況下,NOT IN都是最低效的 (因為它對子查詢中的表執行了一個全表遍歷).

例子: (高效)SELECT * FROM EMP (基礎表) WHERE EMPNO > 0 AND EXISTS (SELECT ‘X' FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO AND LOC = ‘MELB') (低效)SELECT * FROM EMP (基礎表) WHERE EMPNO > 0 AND DEPTNO IN(SELECT DEPTNO FROM DEPT WHERE LOC = ‘MELB') 9 用索引提高效率: 因為索引需要額外的存儲空間和處理,那些不必要的索引反而會使查詢反應時間變慢.。定期的重構索引是有必要的.: ALTER INDEX <INDEXNAME> REBUILD <TABLESPACENAME> 10 用EXISTS替換DISTINCT: 當提交一個包含一對多表信息(比如部門表和雇員表)的查詢時,避免在SELECT子句中使用DISTINCT. 一般可以考慮用EXIST替換, EXISTS 使查詢更為迅速,因為RDBMS核心模塊將在子查詢的條件一旦滿足后,馬上返回結果. 例子: (低效): SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D , EMP E WHERE D.DEPT_NO = E.DEPT_NO

(高效): SELECT DEPT_NO,DEPT_NAME FROM DEPT D WHERE EXISTS ( SELECT ‘X' FROM EMP E WHERE E.DEPT_NO = D.DEPT_NO); 11 sql 語句用大寫的;

因為oracle總是先解析sql語句,把小寫的字母轉換成大寫的再執行 12 避免在索引列上使用NOT 通常

我們要避免在索引列上使用NOT, NOT會產生在和在索引列上使用函數相同的影響. 當ORACLE”碰到”NOT,他就會停止使用索引轉而執行全表掃描.
13 避免在索引列上使用計算. 假如索引列是函數的一部分.優化器將不使用索引而使用全表掃描.舉例: 低效:SELECT … FROM DEPT WHERE SAL * 12 > 25000;

高效: SELECT … FROM DEPT WHERE SAL > 25000/12;

14 用>=替代> 高效:SELECT * FROM EMP WHERE DEPTNO >=4

低效:SELECT * FROM EMP WHERE DEPTNO >3 兩者的區別在于, 前者DBMS將直接跳到第一個DEPT等于4的記錄而后者將首先定位到DEPTNO=3的記錄并且向前掃描到第一個DEPT大于3的記錄.

15 避免在索引列上使用IS NULL和IS NOT NULL 在索引中判空,將無法使用該索引. 低效: (索引失效) SELECT … FROM DEPARTMENT WHERE DEPT_CODE IS NOT NULL; 高效: (索引有效) SELECT … FROM DEPARTMENT WHERE DEPT_CODE >=0; 16 需要當心的WHERE子句: 第一,!= 將導致索引無效

第二, '是字符連接函數. 將導致索引無效.

第三,+是數學函數 . 將導致索引無效.

數據庫SQL語句書寫注意事項


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 免费看日韩欧美一级毛片 | 神马影院不卡不卡在线观看 | 丁香综合在线 | 日韩中文字幕在线 | 欧美成人交tv免费观看 | 狠狠色狠狠干 | 国产一区二区免费在线观看 | 精品欧美一区二区三区在线 | 日本乱人伦片中文字幕三区 | 狠狠色噜噜狠狠狠狠98 | 日韩免费毛片 | 99精品国内不卡在线观看 | 999国产精品视频 | 国产精品久久久久亚洲 | 国产毛片一区二区三区 | 日本中文字幕一区二区高清在线 | 国产乱子伦一区二区三区 | 亚洲免费午夜视频 | 欧美日韩久久中文字幕 | 一区二区三区中文 | 四虎影永久在线观看精品 | www.99爱 | 欧美人成人亚洲专区中文字幕 | 伊人免费 | 国产成年女一区二区三区 | 男女超爽视频免费播放在线观看 | 久久精品国产精品亚洲婷婷 | 尹人在线视频 | 五月婷婷之综合激情 | 亚洲国产精品久久婷婷 | 九九精彩视频在线观看视频 | 毛片大全| 亚洲国产精品日韩在线 | 中文精品久久久久国产网址 | 亚洲自拍小视频 | 精品国产成人 | 国产九九精品 | 日日射天天射 | 99re免费视频精品全部 | 美女网站视频免费 | 成人免费观看www视频 |