<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • SQL語(yǔ)句編寫與優(yōu)化規(guī)范

    時(shí)間:2024-09-23 19:55:26 SQL 我要投稿
    • 相關(guān)推薦

    SQL語(yǔ)句編寫與優(yōu)化規(guī)范

      1 用SELECT查詢用具體字段代替“*”,且盡可能只查詢需要的字段。

      2 多表查詢時(shí),使用表的別名,就可以減少解析的時(shí)間并減少那些由列名歧義引起的語(yǔ)法錯(cuò)誤

      3 用EXISTS替代IN,用NOT EXISTS替代NOT IN

      4 WHERE條件連接順序,把表關(guān)系寫在最前

      例如Oracle采用自下而上的順序解析WHERE子句,表之間的條件連接必須寫在其他條件之前,把可以過(guò)濾掉大量數(shù)據(jù)的條件寫在WHERE子句的最后,按照過(guò)濾記錄數(shù)量的多少

      5 刪除全表時(shí),用TRUNCATE替代DELETE

      當(dāng)刪除表中的記錄時(shí),在通常情況下, 回滾段(rollback segments ) 用來(lái)存放可以被恢復(fù)的信息. 如果你沒(méi)有COMMIT事務(wù),ORACLE會(huì)將數(shù)據(jù)恢復(fù)到刪除之前的狀態(tài)(準(zhǔn)確地說(shuō)是恢復(fù)到執(zhí)行刪除命令之前的狀況) 而當(dāng)運(yùn)用TRUNCATE時(shí), 回滾段不再存放任何可被恢復(fù)的信息.

      當(dāng)命令運(yùn)行后,數(shù)據(jù)不能被恢復(fù).因此很少的資源被調(diào)用,執(zhí)行時(shí)間也會(huì)很短。但只有在刪除全.表數(shù)據(jù)時(shí)才這樣使用。 ...

      6 盡可能多的使用commit

      對(duì)于執(zhí)行,update,語(yǔ)句時(shí)盡量多commit,因?yàn)橄到y(tǒng)性能會(huì)因commit釋放的資源而大大提高。注意事務(wù)的處理,因?yàn)閏ommit的數(shù)據(jù)是不允許回滾的。

      7 優(yōu)化GROUP BY

      為提高GROUP BY的效率,可以將不需要的數(shù)據(jù)在GROUP BY之前過(guò)濾掉,減少由于數(shù)據(jù)量大而帶來(lái)的性能損耗。同時(shí)避免使用HAVING子句,HAVING只會(huì)在檢索出所有記錄之后才對(duì)結(jié)果集進(jìn)行過(guò)濾,這個(gè)處理需要排序、統(tǒng)計(jì)等操作。如果能通過(guò)WHERE子句限制記

      8 ORDER BY字段需建立索引

      ORDER BY語(yǔ)句以找出非索引項(xiàng)或者表達(dá)式,它們會(huì)降低性能。解決這個(gè)問(wèn)題的辦法就是重寫ORDER BY語(yǔ)句以使用索引,也可以為所使用的列建立另外一個(gè)索引,同時(shí)應(yīng)絕對(duì)避免在order by子句中使用表達(dá)式。

      9 有條件的使用union-all 替代union

      這樣做效率會(huì)提高3到5倍。

      10 IS NULL 與 IS NOT NULL(索引失效)

      不能用null作索引,任何包含null值的列都將不會(huì)被包含在索引中。即使索引有多列這樣的情況下,只要這些列中有一列含有null,該列就會(huì)從索引中排除。也就是說(shuō)如果某列存在空值,即使對(duì)該列建索引也不會(huì)提高性能。

      任何在where子句中使用is null或is not null的語(yǔ)句優(yōu)化器是不允許使用索引的。

      11 對(duì)于有聯(lián)接的列,即使最后的聯(lián)接值為一個(gè)靜態(tài)值,優(yōu)化器是不會(huì)使用索引的。(索引失效)

      12 避免使用帶通配符的LIKE查詢(索引失效)

      之前我認(rèn)為只要含有“%”的LIKE查詢索引就會(huì)失效,經(jīng)過(guò)網(wǎng)絡(luò)資料查詢,說(shuō)只有“%”13 注意or條件查詢,兩邊條件必須均建立索引才會(huì)生效(索引失效)

      14 避免在索引列上使用函數(shù)或計(jì)算,如果索引是函數(shù)的一部分,則優(yōu)化器不會(huì)使用索引。(索引失效)

      15 避免使用not、!=、<>(索引失效)

      索引只能告訴什么存在于表中,不能告訴我們什么不存在,當(dāng)數(shù)據(jù)庫(kù)遇到not、!=、<>時(shí),索引會(huì)失效而去進(jìn)行全表掃描。用“>=”代替“>”

      總結(jié)

      原則上,應(yīng)該盡可能的減少與數(shù)據(jù)庫(kù)的交互,但不意味著要寫一個(gè)龐大復(fù)雜的SQL來(lái)獲取所有需要的數(shù)據(jù)。對(duì)于復(fù)雜或訪問(wèn)量頻繁的功能,可以考慮借助緩存來(lái)提升性能。對(duì)于表數(shù)據(jù)量過(guò)于龐大而且持續(xù)增長(zhǎng),考慮歸檔歷史,分開(kāi)查詢;如果仍然無(wú)法提升性能,則可以從增加硬件來(lái)改善,如讀寫分離、數(shù)據(jù)庫(kù)集群等方案。

      在拼寫SQL時(shí),盡可能的將SQL拆解為簡(jiǎn)單易讀的SQL,對(duì)于復(fù)雜邏輯可以借助程序來(lái)協(xié)同完成,一方面執(zhí)行效率不一定低,另一方面也給未來(lái)的運(yùn)維、修改帶來(lái)便捷。如果設(shè)計(jì)原因?qū)е玛P(guān)聯(lián)表略多,考慮視圖、拆解、輔助表的方式來(lái)簡(jiǎn)化查詢,降低SQL復(fù)雜度,減少表關(guān)聯(lián)查詢的數(shù)量(少于5表),且盡可能少用子查詢,視圖嵌套不要超過(guò)2層。

      

    【SQL語(yǔ)句編寫與優(yōu)化規(guī)范】相關(guān)文章:

    SQL優(yōu)化大全09-09

    oracle的sql語(yǔ)句01-21

    SQL查詢語(yǔ)句大全10-24

    SQL語(yǔ)句的理解原則10-05

    mysql SQL語(yǔ)句積累參考10-02

    sql語(yǔ)句的各種模糊查詢08-25

    Oracle的sql語(yǔ)句模擬試題及答案10-12

    SQL語(yǔ)句中的正則表達(dá)示07-28

    J2EE項(xiàng)目代碼編寫規(guī)范01-23

    2016最新J2EE中SQL語(yǔ)句自動(dòng)構(gòu)造方法08-02

    主站蜘蛛池模板: 日产精品久久久久久久| 亚洲国产精品乱码一区二区| 久久精品麻豆日日躁夜夜躁| 亚洲AV无码精品色午夜果冻不卡| 日韩欧美一区二区三区中文精品 | 欲帝精品福利视频导航| 亚洲精品高清无码视频| 97精品国产福利一区二区三区 | 久久久免费精品re6| 国产精品水嫩水嫩| 国产乱码精品一区二区三| 精品精品国产自在久久高清 | 久久99精品久久久久久| 国产欧美日韩综合精品一区二区三区 | 2021国产成人精品国产| 国产精品免费久久| 久久99精品久久久久久动态图| 欧美日激情日韩精品| 中文精品无码中文字幕无码专区| 高清免费久久午夜精品| 人妻无码久久精品| 国产精品国产精品国产专区不卡| 国产精品乱视频| 人人妻人人澡人人爽精品日本 | 中文国产成人精品久久亚洲精品AⅤ无码精品 | 无码精品蜜桃一区二区三区WW| 99精品视频在线观看| 亚洲精品无码成人片在线观看 | 国产精品亚洲精品日韩已满| 精品偷自拍另类在线观看丰满白嫩大屁股ass| 亚洲精品无码av天堂| 3级黄性日本午夜精品| 国产在线精品一区二区中文| 欧美精品www| 国产微拍精品一区二区| 亚洲精品成人av在线| 国产精品精品自在线拍| 无码精品一区二区三区在线| 久久www免费人成精品香蕉| 成人精品一区二区三区| 国产成人无码精品一区在线观看 |