溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

SQL優(yōu)化的方法有哪些

發(fā)布時(shí)間:2021-06-24 11:49:44 來(lái)源:億速云 閱讀:195 作者:chen 欄目:大數(shù)據(jù)

這篇文章主要介紹“SQL優(yōu)化的方法有哪些”,在日常操作中,相信很多人在SQL優(yōu)化的方法有哪些問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”SQL優(yōu)化的方法有哪些”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

在應(yīng)用系統(tǒng)開(kāi)發(fā)初期,由于開(kāi)發(fā)數(shù)據(jù)庫(kù)數(shù)據(jù)比較少,對(duì)于查詢(xún)SQL語(yǔ)句,復(fù)雜視圖的編寫(xiě)等體會(huì)不到SQL語(yǔ)句各種語(yǔ)法等性能優(yōu)劣,但是隨著互聯(lián)網(wǎng)大數(shù)據(jù)的興起,隨著數(shù)據(jù)庫(kù)中數(shù)據(jù)的增加,系統(tǒng)的響應(yīng)速度就成為目前系統(tǒng)需要解決的最主要的問(wèn)題之一。

系統(tǒng)優(yōu)化中一個(gè)很重要的方面就是SQL語(yǔ)句的優(yōu)化,對(duì)于海量數(shù)據(jù),劣質(zhì)SQL語(yǔ)句和優(yōu)質(zhì)SQL語(yǔ)句之間的速度差別可以達(dá)到上百倍,可見(jiàn)對(duì)于一個(gè)系統(tǒng)不是簡(jiǎn)單地能實(shí)現(xiàn)功能就可,而是要寫(xiě)出高質(zhì)量的SQL語(yǔ)句,提高系統(tǒng)的可用性。

在多數(shù)情況下,Oracle使用索引來(lái)更快地遍歷表,優(yōu)化器主要根據(jù)定義的索引提高性能。但是,如果在SQL語(yǔ)句的where子句中寫(xiě)的SQL代碼不合理,就會(huì)造成優(yōu)化器刪去索引而使用全表掃描,一般就這種SQL語(yǔ)句就是所謂的劣質(zhì)SQL語(yǔ)句,在編寫(xiě)SQL語(yǔ)句時(shí),我們應(yīng)清楚優(yōu)化器根據(jù)何種原則來(lái)刪除索引,這有助于寫(xiě)出高性能的SQL語(yǔ)句。我們要做到不但會(huì)寫(xiě)SQL還要做到寫(xiě)出性能優(yōu)良的SQL。

常見(jiàn)優(yōu)化規(guī)則:

一、表連接

-連接的表越多,性能越差

-可能的話,將連接拆分成若干個(gè)過(guò)程逐一執(zhí)行

-優(yōu)先執(zhí)行可明顯減少數(shù)據(jù)量的連接,即可以降低復(fù)雜度,也能夠容易按照預(yù)期執(zhí)行

-如果不可避免多表連接,很可能是設(shè)計(jì)缺陷

-外連接效果差,因?yàn)橥膺B接必須對(duì)左右表進(jìn)行表掃描

-盡量使用inner join查詢(xún)

二、使用臨時(shí)表

如果不可避免,可以考慮使用臨時(shí)表或表變量存放中間結(jié)果

三、少用子查詢(xún)

四、視圖嵌套

不要過(guò)深,一般視圖嵌套不要超過(guò)2個(gè)為宜。

SQL編寫(xiě)注意事項(xiàng):

1、null列使用索引沒(méi)有意義,任何包含null值的列都不會(huì)被包含在索引中,因此where語(yǔ)句中的is null 或is not null 的語(yǔ)句優(yōu)化器是不允許使用索引的

2、concat或 || ,如果對(duì)列進(jìn)行該函數(shù)操作,那么也會(huì)忽略索引的使用

3、like,通配符出現(xiàn)在首位,無(wú)法使用索引,反之可以

4、order by 子句中不要使用非索引列或嵌套表達(dá)式

5、not或!=無(wú)法使用索引,改用<,>

6、where與having,如果having中的過(guò)濾行為能夠在wehre中完成,則應(yīng)該優(yōu)先考慮where

7、exists替代in,not in四最低效的,因?yàn)橐獙?duì)子查詢(xún)的表進(jìn)行全表掃描??梢钥紤]使用外連接或 not exists

8、索引,不要給不必要的字段增加索引,SQL語(yǔ)句盡量大寫(xiě),不要在索引上使用函數(shù)

9、>,>=時(shí),推薦使用>=

10、使用union代替or

11、union和union all,union具有去重的操作,增加了計(jì)算時(shí)間,union all不需要去重,但會(huì)包含相同記錄。同樣功能下,首選union all操作。

到此,關(guān)于“SQL優(yōu)化的方法有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

sql
AI