日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

數(shù)據(jù)庫(kù)SQL語(yǔ)句書寫注意事項(xiàng)

系統(tǒng) 2143 0

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

執(zhí)行順序?yàn)閺挠彝螅幢碛涗洈?shù)少的放到右邊,即最為基礎(chǔ)表。如果有三個(gè)以上的表做連接查詢,我們將交叉表作為基礎(chǔ)表(即被其他表應(yīng)用的表,即關(guān)系表)

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

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

對(duì)于SQL Server有兩種說(shuō)法,第一種:不用考慮順序,SQLServer會(huì)自動(dòng)執(zhí)行過濾數(shù)據(jù)較多的條件;第二種:從左向右的執(zhí)行順序。 3.SELECT 子句中一定避免使用 ‘ * ‘:

注意一定別是用* ,巨耗時(shí)。

4. 刪除重復(fù)記錄:

避免表中出現(xiàn)重復(fù)記錄。

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

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

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

例子: (高效)SELECT * FROM EMP (基礎(chǔ)表) WHERE EMPNO > 0 AND EXISTS (SELECT ‘X' FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO AND LOC = ‘MELB') (低效)SELECT * FROM EMP (基礎(chǔ)表) WHERE EMPNO > 0 AND DEPTNO IN(SELECT DEPTNO FROM DEPT WHERE LOC = ‘MELB') 9 用索引提高效率: 因?yàn)樗饕枰~外的存儲(chǔ)空間和處理,那些不必要的索引反而會(huì)使查詢反應(yīng)時(shí)間變慢.。定期的重構(gòu)索引是有必要的.: ALTER INDEX <INDEXNAME> REBUILD <TABLESPACENAME> 10 用EXISTS替換DISTINCT: 當(dāng)提交一個(gè)包含一對(duì)多表信息(比如部門表和雇員表)的查詢時(shí),避免在SELECT子句中使用DISTINCT. 一般可以考慮用EXIST替換, EXISTS 使查詢更為迅速,因?yàn)镽DBMS核心模塊將在子查詢的條件一旦滿足后,馬上返回結(jié)果. 例子: (低效): 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 語(yǔ)句用大寫的;

因?yàn)閛racle總是先解析sql語(yǔ)句,把小寫的字母轉(zhuǎn)換成大寫的再執(zhí)行 12 避免在索引列上使用NOT 通常

我們要避免在索引列上使用NOT, NOT會(huì)產(chǎn)生在和在索引列上使用函數(shù)相同的影響. 當(dāng)ORACLE”碰到”NOT,他就會(huì)停止使用索引轉(zhuǎn)而執(zhí)行全表掃描.
13 避免在索引列上使用計(jì)算. 假如索引列是函數(shù)的一部分.優(yōu)化器將不使用索引而使用全表掃描.舉例: 低效: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 兩者的區(qū)別在于, 前者DBMS將直接跳到第一個(gè)DEPT等于4的記錄而后者將首先定位到DEPTNO=3的記錄并且向前掃描到第一個(gè)DEPT大于3的記錄.

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

第二, '是字符連接函數(shù). 將導(dǎo)致索引無(wú)效.

第三,+是數(shù)學(xué)函數(shù) . 將導(dǎo)致索引無(wú)效.

數(shù)據(jù)庫(kù)SQL語(yǔ)句書寫注意事項(xiàng)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 邵阳县| 长葛市| 淮滨县| 永清县| 郑州市| 都江堰市| 读书| 永宁县| 乌恰县| 墨竹工卡县| 洪泽县| 海伦市| 乳源| 四川省| 铜川市| 邵阳县| 盐亭县| 夏河县| 孟连| 华阴市| 天长市| 孝义市| 茶陵县| 交城县| 溆浦县| 梁河县| 文化| 若羌县| 松潘县| 灵璧县| 博白县| 富宁县| 湘潭市| 山东省| 宁蒗| 政和县| 神池县| 廊坊市| 吉水县| 盐边县| 多伦县|