chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

30種SQL語句優(yōu)化方法

數(shù)據(jù)分析與開發(fā) ? 來源:數(shù)據(jù)分析與開發(fā) ? 作者:CSDN-青春微涼不離 ? 2020-11-19 16:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在SQL查詢中為了提高查詢效率,我們常常會采取一些措施對查詢語句進行SQL優(yōu)化,下面總結(jié)一些方法,供大家參考。

01

對查詢進行優(yōu)化,應(yīng)盡量避免全表掃描,首先應(yīng)考慮在 where 及 order by 涉及的列上建立索引。

02

應(yīng)盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描。

03

應(yīng)盡量避免在 where 子句中對字段進行 null 值判斷,否則將導(dǎo)致引擎放棄使用索引而進行全表掃描,如:

select id from t where num is null

可以在num上設(shè)置默認值0,確保表中num列沒有null值,然后這樣查詢:

select id from t where num=0

04

應(yīng)盡量避免在 where 子句中使用 or 來連接條件,否則將導(dǎo)致引擎放棄使用索引而進行全表掃描,如:

select id from t where num=10 or num=20

可以這樣查詢:

selectidfromtwherenum=10unionallselect id from t where num=20

05

下面的查詢也將導(dǎo)致全表掃描:

selectidfromtwherenamelike'%abc%'

若要提高效率,可以考慮全文檢索。

06

in 和 not in 也要慎用,否則會導(dǎo)致全表掃描,如:

select id from t where num in(1,2,3)

對于連續(xù)的數(shù)值,能用 between 就不要用 in 了:

select id from t where num between 1 and 3

07

如果在 where 子句中使用參數(shù),也會導(dǎo)致全表掃描。因為SQL只有在運行時才會解析局部變量,但優(yōu)化程序不能將訪問計劃的選擇推遲到運行時;它必須在編譯時進行選擇。然而,如果在編譯時建立訪問計劃,變量的值還是未知的,因而無法作為索引選擇的輸入項。如下面語句將進行全表掃描:

select id from t where num=@num

可以改為強制查詢使用索引:

select id from t with(index(索引名)) where num=@num

08

應(yīng)盡量避免在 where 子句中對字段進行表達式操作,這將導(dǎo)致引擎放棄使用索引而進行全表掃描。如:

select id from t where num/2=100

應(yīng)改為:

selectidfromtwherenum=100*2

09

應(yīng)盡量避免在where子句中對字段進行函數(shù)操作,這將導(dǎo)致引擎放棄使用索引而進行全表掃描。如:

select id from t where substring(name,1,3)='abc'--name以abc開頭的idselect id from t where datediff(day,createdate,'2005-11-30')=0--'2005-11-30'生成的id

應(yīng)改為:

selectidfromtwherenamelike'abc%'select id from t where createdate>='2005-11-30' and createdate<'2005-12-1'

10

不要在 where 子句中的“=”左邊進行函數(shù)、算術(shù)運算或其他表達式運算,否則系統(tǒng)將不能正確使用索引。

11

在使用索引字段作為條件時,如果該索引是復(fù)合索引,那么必須使用到該索引中的第一個字段作為條件時才能保證系統(tǒng)使用該索引,否則該索引將不會被使用,并且應(yīng)盡可能的讓字段順序與索引順序相一致。

12

不要寫一些沒有意義的查詢,如需要生成一個空表結(jié)構(gòu):

select col1,col2 into #t from t where 1=0

這類代碼不會返回任何結(jié)果集,但是會消耗系統(tǒng)資源的,應(yīng)改成這樣:

create table #t(...)

13

很多時候用 exists 代替 in 是一個好的選擇:

select num from a where num in(select num from b)

用下面的語句替換:

selectnumfromawhereexists(select1frombwherenum=a.num)

14

并不是所有索引對查詢都有效,SQL是根據(jù)表中數(shù)據(jù)來進行查詢優(yōu)化的,當索引列有大量數(shù)據(jù)重復(fù)時,SQL查詢可能不會去利用索引,如一表中有字段sex,male、female幾乎各一半,那么即使在sex上建了索引也對查詢效率起不了作用。

15

索引并不是越多越好,索引固然可以提高相應(yīng)的 select 的效率,但同時也降低了 insert 及 update 的效率,因為 insert 或 update 時有可能會重建索引,所以怎樣建索引需要慎重考慮,視具體情況而定。一個表的索引數(shù)最好不要超過6個,若太多則應(yīng)考慮一些不常使用到的列上建的索引是否有必要。

16

應(yīng)盡可能的避免更新 clustered 索引數(shù)據(jù)列,因為 clustered 索引數(shù)據(jù)列的順序就是表記錄的物理存儲順序,一旦該列值改變將導(dǎo)致整個表記錄的順序的調(diào)整,會耗費相當大的資源。若應(yīng)用系統(tǒng)需要頻繁更新 clustered 索引數(shù)據(jù)列,那么需要考慮是否應(yīng)將該索引建為 clustered 索引。

17

盡量使用數(shù)字型字段,若只含數(shù)值信息的字段盡量不要設(shè)計為字符型,這會降低查詢和連接的性能,并會增加存儲開銷。這是因為引擎在處理查詢和連接時會逐個比較字符串中每一個字符,而對于數(shù)字型而言只需要比較一次就夠了。

18

盡可能的使用 varchar/nvarchar 代替 char/nchar ,因為首先變長字段存儲空間小,可以節(jié)省存儲空間,其次對于查詢來說,在一個相對較小的字段內(nèi)搜索效率顯然要高些。

19

任何地方都不要使用 select * from t ,用具體的字段列表代替“*”,不要返回用不到的任何字段。

20

盡量使用表變量來代替臨時表。如果表變量包含大量數(shù)據(jù),請注意索引非常有限(只有主鍵索引)。

21

避免頻繁創(chuàng)建和刪除臨時表,以減少系統(tǒng)表資源的消耗。

22

臨時表并不是不可使用,適當?shù)厥褂盟鼈兛梢允鼓承├谈行?,例如,當需要重?fù)引用大型表或常用表中的某個數(shù)據(jù)集時。但是,對于一次性事件,最好使用導(dǎo)出表。

23

在新建臨時表時,如果一次性插入數(shù)據(jù)量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果數(shù)據(jù)量不大,為了緩和系統(tǒng)表的資源,應(yīng)先create table,然后insert。

24

如果使用到了臨時表,在存儲過程的最后務(wù)必將所有的臨時表顯式刪除,先 truncate table ,然后 drop table ,這樣可以避免系統(tǒng)表的較長時間鎖定。

25

盡量避免使用游標,因為游標的效率較差,如果游標操作的數(shù)據(jù)超過1萬行,那么就應(yīng)該考慮改寫。

26

使用基于游標的方法或臨時表方法之前,應(yīng)先尋找基于集的解決方案來解決問題,基于集的方法通常更有效。

27

與臨時表一樣,游標并不是不可使用。對小型數(shù)據(jù)集使用 FAST_FORWARD 游標通常要優(yōu)于其他逐行處理方法,尤其是在必須引用幾個表才能獲得所需的數(shù)據(jù)時。在結(jié)果集中包括“合計”的例程通常要比使用游標執(zhí)行的速度快。如果開發(fā)時間允許,基于游標的方法和基于集的方法都可以嘗試一下,看哪一種方法的效果更好。

28

在所有的存儲過程和觸發(fā)器的開始處設(shè)置 SET NOCOUNT ON ,在結(jié)束時設(shè)置 SET NOCOUNT OFF 。無需在執(zhí)行存儲過程和觸發(fā)器的每個語句后向客戶端發(fā)送 DONE_IN_PROC 消息。

29

盡量避免向客戶端返回大數(shù)據(jù)量,若數(shù)據(jù)量過大,應(yīng)該考慮相應(yīng)需求是否合理。

30

盡量避免大事務(wù)操作,提高系統(tǒng)并發(fā)能力。

責任編輯:xj

原文標題:30 種 SQL 語句優(yōu)化,進階必備!

文章出處:【微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    4078

    瀏覽量

    68520
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    928

    瀏覽量

    29737
  • SQL語句
    +關(guān)注

    關(guān)注

    0

    文章

    19

    瀏覽量

    7250

原文標題:30 種 SQL 語句優(yōu)化,進階必備!

文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    MySQL慢查詢調(diào)優(yōu)指南

    MySQL慢查詢是數(shù)據(jù)庫性能問題的最常見原因。當一條SQL語句執(zhí)行超過1秒時,就可能影響用戶體驗;超過10秒時,通常會收到用戶投訴;而超過30秒的查詢,往往意味著系統(tǒng)存在嚴重的性能問題。本文從實
    的頭像 發(fā)表于 04-09 10:01 ?151次閱讀

    NineData SQL AI 智能補全上線:寫 SQL,不必每次都從頭敲

    NineData推出SQLAI智能補全功能,通過AI技術(shù)實現(xiàn)上下文感知的SQL語句智能提示。該功能不僅能補全關(guān)鍵字,還能根據(jù)當前輸入內(nèi)容預(yù)測后續(xù)查詢意圖,顯著提升多表關(guān)聯(lián)、復(fù)雜條件等場景下的編寫效率
    的頭像 發(fā)表于 04-01 20:19 ?247次閱讀
    NineData <b class='flag-5'>SQL</b> AI 智能補全上線:寫 <b class='flag-5'>SQL</b>,不必每次都從頭敲

    器件工藝協(xié)同優(yōu)化中加速版圖設(shè)計的三種方法

    器件工藝協(xié)同優(yōu)化(DTCO)流程需要生成海量版圖。本文將介紹幾種借助自動化手段,加速這一耗時流程的實現(xiàn)方法。
    的頭像 發(fā)表于 03-24 09:41 ?193次閱讀
    器件工藝協(xié)同<b class='flag-5'>優(yōu)化</b>中加速版圖設(shè)計的三<b class='flag-5'>種方法</b>

    NineData 社區(qū)版的慢SQL分析,比查看日志+看EXPLAIN適合中小團隊

    度分析,定位問題后還可銜接后續(xù)操作。且其支持 Docker 單機本地內(nèi)網(wǎng)部署,10 個數(shù)據(jù)源額度適合中小團隊,優(yōu)化SQL 處理流程。
    的頭像 發(fā)表于 03-17 14:07 ?104次閱讀
    NineData 社區(qū)版的慢<b class='flag-5'>SQL</b>分析,比查看日志+看EXPLAIN適合中小團隊

    MySQL 慢 SQL 排查這件事,NineData 社區(qū)VS DBeaver/ Navicat 技術(shù)分析

    :基于自研 CDC 技術(shù),支持幾十數(shù)據(jù)源之間的實時復(fù)制; - 數(shù)據(jù)庫對比:快速比對結(jié)構(gòu)與數(shù)據(jù),不一致時自動生成變更 SQL。
    的頭像 發(fā)表于 03-17 11:53 ?112次閱讀
    MySQL 慢 <b class='flag-5'>SQL</b> 排查這件事,NineData 社區(qū)VS DBeaver/ Navicat 技術(shù)分析

    不用編程不用聯(lián)網(wǎng),實現(xiàn)倍福(BECKHOFF)PLC對接SQL數(shù)據(jù)庫,上報和查詢數(shù)據(jù)的案例

    消息區(qū)域顯示的狀態(tài)消息;根據(jù)狀態(tài)消息調(diào)試。如下圖:智能網(wǎng)關(guān)根據(jù)以上配置自動生成SQL語句命令,結(jié)合數(shù)據(jù)庫相關(guān)參數(shù)對接到服務(wù)器,多個SQL語句用\'任務(wù)組\'區(qū)分,相同的任務(wù)組即為同一個
    發(fā)表于 10-10 11:14

    MySQL性能優(yōu)化實戰(zhàn)

    你是否遇到過這些場景:凌晨3點被告警電話吵醒,數(shù)據(jù)庫CPU飆到100%?一條簡單的查詢語句要跑30秒?明明加了索引,查詢還是慢如蝸牛?
    的頭像 發(fā)表于 09-17 16:19 ?590次閱讀

    數(shù)據(jù)庫慢查詢分析與SQL優(yōu)化實戰(zhàn)技巧

    今天,我將分享我在處理數(shù)千次數(shù)據(jù)庫性能問題中積累的實戰(zhàn)經(jīng)驗,幫助你系統(tǒng)掌握慢查詢分析與SQL優(yōu)化的核心技巧。無論你是剛?cè)腴T的運維新手,還是有一定經(jīng)驗的工程師,這篇文章都將為你提供實用的解決方案。
    的頭像 發(fā)表于 09-08 09:34 ?1202次閱讀

    數(shù)據(jù)庫性能優(yōu)化指南

    作為一名在大廠摸爬滾打多年的運維老兵,我見過太多因為數(shù)據(jù)庫性能問題導(dǎo)致的生產(chǎn)事故。今天分享一套完整的數(shù)據(jù)庫優(yōu)化方法論,從SQL層面到硬件配置,幫你徹底解決性能瓶頸!
    的頭像 發(fā)表于 08-18 11:21 ?871次閱讀

    SQL 通用數(shù)據(jù)類型

    SQL 通用數(shù)據(jù)類型 數(shù)據(jù)庫表中的每個列都要求有名稱和數(shù)據(jù)類型。Each column in a database table is required to have a name and a
    的頭像 發(fā)表于 08-18 09:46 ?834次閱讀

    Text2SQL準確率暴漲22.6%!3大維度全拆

    摘要 技術(shù)背景:Text2SQL 是將自然語言查詢轉(zhuǎn)為 SQL 的任務(wù),經(jīng)歷了基于規(guī)則、神經(jīng)網(wǎng)絡(luò)、預(yù)訓(xùn)練語言模型、大語言模型四個階段。當前面臨提示優(yōu)化、模型訓(xùn)練、推理時增強三大難題,研究
    的頭像 發(fā)表于 08-14 11:17 ?810次閱讀
    Text2<b class='flag-5'>SQL</b>準確率暴漲22.6%!3大維度全拆

    無序超均勻固體器件的網(wǎng)格優(yōu)化方法

    近日,天津大學(xué)精密儀器與光電子工程學(xué)院的光子芯片實驗室研發(fā)了一無序超均勻固體器件的網(wǎng)格優(yōu)化方法,成果獲中國發(fā)明專利(ZL202410659505.2)授權(quán)。
    的頭像 發(fā)表于 07-28 16:10 ?1074次閱讀
    一<b class='flag-5'>種</b>無序超均勻固體器件的網(wǎng)格<b class='flag-5'>優(yōu)化</b><b class='flag-5'>方法</b>

    Unicore標準NEMA語句GSA及說明

    本文介紹和芯星通的NEMA語句說明。
    的頭像 發(fā)表于 07-16 11:39 ?814次閱讀
    Unicore標準NEMA<b class='flag-5'>語句</b>GSA及說明

    大促數(shù)據(jù)庫壓力激增,如何一眼定位 SQL 執(zhí)行來源?

    語句成為了性能瓶頸。面對這樣的困境,本篇文章提出了對 SQL 進行 “染色” 的方法來幫助大家 一眼定位問題 SQL,而無需再在多處邏輯中輾轉(zhuǎn)騰挪 。本文的思路主要受之前郭忠強老師發(fā)
    的頭像 發(fā)表于 06-10 11:32 ?644次閱讀
    大促數(shù)據(jù)庫壓力激增,如何一眼定位 <b class='flag-5'>SQL</b> 執(zhí)行來源?

    詳解TIA Portal SCL編程語言中的IF語句

    IF 語句是編程中最基本和最重要的控制結(jié)構(gòu)之一,它的主要作用是根據(jù)條件決定程序的執(zhí)行路徑,IF 語句是編程中實現(xiàn)邏輯判斷和決策的基礎(chǔ)。
    的頭像 發(fā)表于 05-24 15:01 ?2102次閱讀
    詳解TIA Portal SCL編程語言中的IF<b class='flag-5'>語句</b>