成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

關(guān)于SQL優(yōu)化的一些思想和原則

數(shù)據(jù)庫 Oracle
SQL語句是對數(shù)據(jù)庫(數(shù)據(jù))進(jìn)行操作的惟一途徑,消耗了70%~90%的數(shù)據(jù)庫資源。獨(dú)立于程序設(shè)計邏輯,相對于對程序源代碼的優(yōu)化,對SQL語句的優(yōu)化在時間成本和風(fēng)險上的代價都很低。本節(jié)主要介紹一些SQL優(yōu)化方面的知識,希望會對讀者有所幫助。

一、優(yōu)化的目的

對應(yīng)用程序的優(yōu)化通常可分為兩個方面:源代碼優(yōu)化和SQL語句優(yōu)化。由于涉及到對程序邏輯的改變,源代碼的優(yōu)化在時間成本和風(fēng)險上代價很高(尤其是對正在使用中的系統(tǒng)進(jìn)行優(yōu)化) 。另一方面,源代碼的優(yōu)化對數(shù)據(jù)庫系統(tǒng)性能的提升收效有限,因為應(yīng)用程序?qū)?shù)據(jù)庫的操作最終要表現(xiàn)為SQL語句對數(shù)據(jù)庫的操作。

對SQL語句優(yōu)化有以下一些直接原因:

1.SQL語句是對數(shù)據(jù)庫(數(shù)據(jù)) 進(jìn)行操作的惟一途徑,應(yīng)用程序的執(zhí)行最終要?dú)w結(jié)為SQL語句的執(zhí)行,SQL語句的效率對數(shù)據(jù)庫系統(tǒng)的性能起到了決定性的作用。

2.SQL語句消耗了70%~90%的數(shù)據(jù)庫資源。

3.SQL語句獨(dú)立于程序設(shè)計邏輯,對SQL語句進(jìn)行優(yōu)化不會影響程序邏輯,相對于對程序源代碼的優(yōu)化,對SQL語句優(yōu)化在時間成本和風(fēng)險上的代價都很低。

4.SQL語句可以有不同的寫法,不同的寫法在性能上的差異可能很大。

5.SQL語句易學(xué),難精通。SQL語句的性能往往同實(shí)際運(yùn)行系統(tǒng)的數(shù)據(jù)庫結(jié)構(gòu)、記錄數(shù)量等有關(guān),不存在普遍適用的規(guī)律來提升性能。

二、優(yōu)化數(shù)據(jù)庫的思想

1、關(guān)鍵字段建立索引。

2、使用存儲過程,它使SQL變得更加靈活和高效。

3、備份數(shù)據(jù)庫和清除垃圾數(shù)據(jù)。

4、SQL語句語法的優(yōu)化。

5、清理刪除日志。

三、SQL語句優(yōu)化的原則

不要以為只有SELECT語句是查詢。實(shí)際上,帶有任何WHERE條件的DML(INSERT、UPDATE、DELETE)語句中都包含查詢要求,在后面的文章中,當(dāng)說到查詢時,不一定只是指SELECT語句,也有可能指DML語句中的查詢部分。

我們知道,SQL語句同其它語言(如C語言)的語句不一樣,它是非過程化(non-procedural)的語句,即當(dāng)你要取數(shù)據(jù)時,不需要告訴數(shù)據(jù)庫通 過何種途徑去取數(shù)據(jù),如到底是通過索引取數(shù)據(jù),還是應(yīng)該將表中的每行數(shù)據(jù)都取出來,然后再通過一一比較的方式取數(shù)據(jù)(即全表掃描)。

為了實(shí)現(xiàn)一個查詢,內(nèi)核必須為每個查詢定制一個查詢策略,或為取出符合條件的數(shù)據(jù)生成一個執(zhí)行計劃(execution plan)。典型的,對于同一個查詢,可能有幾個執(zhí)行計劃都符合要求,都能得到符合條件的數(shù)據(jù)。例如,參與連接的表可以有多種不同的連接方法,這取決于連接條件和優(yōu)化器采用的連接方法。為了在多個執(zhí)行計劃中選擇最優(yōu)的執(zhí)行計劃,優(yōu)化器必須使用一些實(shí)際的指標(biāo)來衡量每個執(zhí)行計劃使用的資源(I/0次數(shù)、 CPU等),這些資源也就是我們所說的代價(cost)。如果一個執(zhí)行計劃使用的資源多,我們就說使用執(zhí)行計劃的代價大。以執(zhí)行計劃的代價大小作為衡量標(biāo)準(zhǔn),優(yōu)化器選擇代價最小的執(zhí)行計劃作為真正執(zhí)行該查詢的執(zhí)行計劃,并拋棄其它的執(zhí)行計劃。

#p#

四、關(guān)于ORACLE優(yōu)化器

在任何可能的時候都會對表達(dá)式進(jìn)行評估,并且把特定的語法結(jié)構(gòu)轉(zhuǎn)換成等價的結(jié)構(gòu),這么做的原因是 :要么結(jié)果表達(dá)式能夠比源表達(dá)式具有更快的速度;要么源表達(dá)式只是結(jié)果表達(dá)式的一個等價語義結(jié)構(gòu)。不同的SQL結(jié)構(gòu)有時具有同樣的操作(例如:= ANY (subquery) and IN (subquery)),ORACLE會把他們映射到一個單一的語義結(jié)構(gòu)。下面我們介紹常量優(yōu)化和一些常用的操作符優(yōu)化的知識。

1、常量優(yōu)化:

常量的計算是在語句被優(yōu)化時一次性完成,而不是在每次執(zhí)行時。下面是檢索月薪大于2000的的表達(dá)式:

 

  1. sal > 24000/12   
  2.  
  3. sal > 2000   
  4.  
  5. sal*12 > 24000  

 

如果SQL語句包括第一種情況,優(yōu)化器會簡單地把它轉(zhuǎn)變成第二種。

優(yōu)化器不會簡化跨越比較符的表達(dá)式,例如第三條語句,鑒于此,應(yīng)盡量寫用常量跟字段比較檢索的表達(dá)式,而不要將字段置于表達(dá)式當(dāng)中。否則沒有辦法優(yōu)化,比如如果sal上有索引,第一和第二就可以使用,第三就難以使用。

2、操作符優(yōu)化:

優(yōu)化器把使用LIKE操作符和一個沒有通配符的表達(dá)式組成的檢索表達(dá)式轉(zhuǎn)換為一個“=”操作符表達(dá)式。例如:優(yōu)化器會把表達(dá)式ename LIKE 'SMITH'轉(zhuǎn)換為ename = 'SMITH'。優(yōu)化器只能轉(zhuǎn)換涉及到可變長數(shù)據(jù)類型的表達(dá)式,前一個例子中,如果ENAME字段的類型是CHAR(10), 那么優(yōu)化器將不做任何轉(zhuǎn)換。一般來講LIKE比較難以優(yōu)化。

IN 操作符優(yōu)化:

優(yōu)化器把使用IN比較符的檢索表達(dá)式替換為等價的使用“=”和“OR”操作符的檢索表達(dá)式。

例如,優(yōu)化器會把表達(dá)式ename IN ('SMITH','KING','JONES')替換為:ename = 'SMITH' OR ename = 'KING' OR ename = 'JONES‘。

ANY和SOME 操作符優(yōu)化:

優(yōu)化器將跟隨值列表的ANY和SOME檢索條件用等價的同等操作符和“OR”組成的表達(dá)式替換。例如,優(yōu)化器將如下所示的第一條語句用第二條語句替換:

 

  1. sal > ANY (:first_sal, :second_sal)   
  2.  
  3. sal > :first_sal OR  
  4.  
  5. sal > :second_sal  

 

優(yōu)化器將跟隨子查詢的ANY和SOME檢索條件轉(zhuǎn)換成由“EXISTS”和一個相應(yīng)的子查詢組成的檢索表達(dá)式。例如,優(yōu)化器將如下所示的第一條語句用第二條語句替換:

 

  1. > ANY (SELECT sal FROM emp WHERE job = 'ANALYST')   
  2.  
  3. EXISTS (SELECT sal FROM emp WHERE job = 'ANALYST' AND x > sal) 

 

ALL操作符優(yōu)化:

優(yōu)化器將跟隨值列表的ALL操作符用等價的“=”和“AND”組成的表達(dá)式替換。例如:sal > ALL (:first_sal, :second_sal)表達(dá)式會被替換為:sal > :first_sal AND sal > :second_sal 。

對于跟隨子查詢的ALL表達(dá)式,優(yōu)化器用ANY和另外一個合適的比較符組成的表達(dá)式替換。例如x > ALL (SELECT sal FROM emp WHERE deptno = 10) 替換為:NOT (x <= ANY (SELECT sal FROM emp WHERE deptno = 10)) 。接下來優(yōu)化器會把第二個表達(dá)式適用ANY表達(dá)式的轉(zhuǎn)換規(guī)則轉(zhuǎn)換為下面的表達(dá)式:

 

  1. NOT EXISTS (SELECT sal FROM emp WHERE deptno = 10 AND x <= sal) 

 

BETWEEN 操作符優(yōu)化:

優(yōu)化器總是用“>=”和“<=”比較符來等價的代替BETWEEN操作符。

例如:優(yōu)化器會把表達(dá)式sal BETWEEN 2000 AND 3000用sal >= 2000 AND sal <= 3000來代替。

NOT 操作符優(yōu)化:

優(yōu)化器總是試圖簡化檢索條件以消除“NOT”邏輯操作符的影響,這將涉及到“NOT”操作符的消除以及代以相應(yīng)的比較運(yùn)算符。例如,優(yōu)化器將下面的第一條語句用第二條語句代替:

 

  1. NOT deptno = (SELECT deptno FROM emp WHERE ename = 'TAYLOR')   
  2.  
  3. deptno <> (SELECT deptno FROM emp WHERE ename = 'TAYLOR')  

 

通常情況下一個含有NOT操作符的語句有很多不同的寫法,優(yōu)化器的轉(zhuǎn)換原則是使“NOT”操作符后邊的子句盡可能的簡單,即使可能會使結(jié)果表達(dá)式包含了更多的“NOT”操作符。例如,優(yōu)化器將如下所示的第一條語句用第二條語句代替:

 

  1. NOT (sal < 1000 OR comm IS NULL)   
  2.  
  3. NOT sal < 1000 AND comm IS NOT NULL sal >= 1000 AND comm IS NOT NULL 

 

關(guān)于SQL優(yōu)化的知識就介紹到這里,謝謝各位的支持!

【編輯推薦】

  1. 提高SQL執(zhí)行效率的幾點(diǎn)建議
  2. SQL Server視圖管理中的四個限制條件
  3. SQL Server數(shù)據(jù)庫多種方式查找重復(fù)記錄
  4. 使用SQL Trace來實(shí)現(xiàn)SQL Server的跟蹤操作
  5. CTE和WITH AS短語結(jié)合使用提高SQL查詢性能
責(zé)任編輯:趙鵬 來源: CSDN博客
相關(guān)推薦

2021-06-10 10:02:19

優(yōu)化緩存性能

2017-09-20 15:07:32

數(shù)據(jù)庫SQL注入技巧分享

2018-07-30 08:41:48

VueReact區(qū)別

2012-06-07 10:17:55

軟件設(shè)計設(shè)計原則Java

2011-07-13 09:13:56

Android設(shè)計

2013-04-07 10:40:55

前端框架前端

2009-06-18 09:51:25

Java繼承

2013-07-18 16:16:51

2013-08-21 13:47:29

PhoneUDIDUUID

2010-09-28 14:14:19

SQL語句

2011-05-23 18:06:24

站內(nèi)優(yōu)化SEO

2009-07-01 16:20:34

Flex垃圾回收性能優(yōu)化

2012-09-25 10:03:56

JavaJava封面Java開發(fā)

2011-03-11 09:27:11

Java性能監(jiān)控

2015-12-04 10:04:53

2022-04-14 10:22:44

故事卡業(yè)務(wù)

2012-04-19 10:06:55

微軟Windows 8 E

2020-09-28 06:45:42

故障復(fù)盤修復(fù)

2009-06-04 16:28:43

EJB常見問題

2017-12-21 07:54:07

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 天天爱天天操 | www久久av | 欧美激情久久久 | 成人久久18免费网站 | 色婷婷综合久久久久中文一区二区 | 日韩α片| 亚洲国产自产 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 国产视频中文字幕 | 精品久久久久久久久久久久久久 | 国产精品亚洲综合 | 亚洲狠狠爱 | 日本免费一区二区三区四区 | 日韩在线免费播放 | 一区二区三区在线观看视频 | 高清人人天天夜夜曰狠狠狠狠 | 色免费视频 | 中文字幕精品一区久久久久 | 国产精品久久久久9999鸭 | 欧美三级视频 | 国产在线播放一区二区三区 | 久草院线 | 国产成人精品一区二区三区在线观看 | 国产精品成人一区二区三区 | 日皮视频免费 | 亚洲精品视频在线 | 中国xxxx性xxxx产国 | 成人国产网站 | 久久久久久国 | 欧美日本在线观看 | 久久久久久九九九九九九 | 国产91在线精品 | 一级黄色毛片 | 国产成人免费视频网站高清观看视频 | 第一福利社区1024 | 麻豆精品国产91久久久久久 | 午夜影院网站 | 久草久草久草 | 999精品在线 | 亚洲精品久久久久久一区二区 | 国产精彩视频在线观看 |