真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何讓SQL再快一點(diǎn)兒

這篇文章將為大家詳細(xì)講解有關(guān)如何讓SQL再快一點(diǎn)兒,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、靈寶網(wǎng)絡(luò)推廣、小程序開發(fā)、靈寶網(wǎng)絡(luò)營(yíng)銷、靈寶企業(yè)策劃、靈寶品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供靈寶建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com


SQL即結(jié)構(gòu)化查詢語言(Structured Query Language),是一種特殊目的的編程語言,是一種數(shù)據(jù)庫查詢和程序設(shè)計(jì)語言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系型數(shù)據(jù)庫系統(tǒng)。

從接觸編程到現(xiàn)在一直從事和數(shù)據(jù)庫相關(guān)的工作,SQL是我使用時(shí)間最長(zhǎng)的程序語言,沒有之一。

關(guān)于SQL優(yōu)化的文章網(wǎng)上很多,很具體,寫的很不錯(cuò),這里不再贅述。這篇文章將會(huì)結(jié)合平時(shí)工作中遇到的問題和經(jīng)驗(yàn)心得來闡述如何做好SQL優(yōu)化,其中有錯(cuò)誤和不足的地方,還請(qǐng)大家糾正補(bǔ)充。

對(duì)于數(shù)據(jù)庫優(yōu)化有兩個(gè)層面,一是SQL優(yōu)化,屬于業(yè)務(wù)層優(yōu)化;一是數(shù)據(jù)庫設(shè)計(jì)、表空間規(guī)劃、緩存等屬于管理層面的優(yōu)化,我們這里只討論SQL優(yōu)化這個(gè)層面。

接受挑戰(zhàn)

不要被運(yùn)行效率低下或者復(fù)雜的SQL嚇倒,要勇于接收它的挑戰(zhàn),問題很明確就是要把這個(gè)SQL優(yōu)化快一點(diǎn),解決方法肯定比遇到的問題多。

越是運(yùn)行慢,越是復(fù)雜的SQL優(yōu)化的空間就越大。

分析場(chǎng)景

數(shù)據(jù)處理大致可以分成兩大類:聯(lián)機(jī)事務(wù)處理OLTP(on-line transaction processing)、聯(lián)機(jī)分析處理OLAP(On-Line Analytical Processing)。OLTP是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的主要應(yīng)用,主要是基本的、日常的事務(wù)處理,例如銀行交易。OLAP是數(shù)據(jù)倉庫系統(tǒng)的主要應(yīng)用,支持復(fù)雜的分析操作,側(cè)重決策支持,并且提供直觀易懂的查詢結(jié)果。 

OLTP 系統(tǒng)強(qiáng)調(diào)數(shù)據(jù)庫內(nèi)存效率,強(qiáng)調(diào)內(nèi)存各種指標(biāo)的命令率,強(qiáng)調(diào)綁定變量,強(qiáng)調(diào)并發(fā)操作,對(duì)于SQL的執(zhí)行效率有很高的要求;

OLAP 系統(tǒng)則強(qiáng)調(diào)數(shù)據(jù)分析,強(qiáng)調(diào)SQL執(zhí)行時(shí)機(jī),強(qiáng)調(diào)磁盤I/O,強(qiáng)調(diào)分區(qū)等。

OLTP要求事務(wù)一致性和快速執(zhí)行,SQL執(zhí)行時(shí)間一般以毫秒或者秒為單位;OLAP對(duì)事務(wù)一致性要求不高,SQL執(zhí)行時(shí)間以分鐘或者小時(shí)為單位。因此,不同的業(yè)務(wù)場(chǎng)景,SQL優(yōu)化的方法也是不同的。

定位SQL優(yōu)化點(diǎn)

由于數(shù)據(jù)庫產(chǎn)品、參數(shù)配置甚至同一款產(chǎn)品的不同發(fā)行版本都會(huì)導(dǎo)致同一條SQL出現(xiàn)不同的運(yùn)行效率。隨著業(yè)務(wù)數(shù)據(jù)的增長(zhǎng),原本運(yùn)行良好的SQL也會(huì)出現(xiàn)瓶頸。

變化再多也有規(guī)律可循,SQL運(yùn)行效率低根本的問題就是SQL表關(guān)聯(lián)太多、SQL邏輯太復(fù)雜、表數(shù)據(jù)量太大、未使用索引等,這些就是我們要優(yōu)化的點(diǎn)。

拿到運(yùn)行效率低的SQL以后,要分析一下該條SQL用到哪些表?哪些索引?表中的數(shù)據(jù)量是多少?對(duì)整個(gè)SQL運(yùn)行的基礎(chǔ)環(huán)境有一個(gè)清晰的認(rèn)識(shí)。

優(yōu)化SQL最常用的輔助工具就是數(shù)據(jù)庫本身提供的“執(zhí)行計(jì)劃”,如何開啟、使用執(zhí)行計(jì)劃分析和優(yōu)化SQL,可點(diǎn)擊文章最后左下角「閱讀原文」查看之前整理的一篇關(guān)于《數(shù)據(jù)庫SQL執(zhí)行計(jì)劃應(yīng)用初探》的文章。

進(jìn)行SQL優(yōu)化

定位到SQL執(zhí)行效率低下的原因以后,要想辦法優(yōu)化它,下面是一些通用的處理思路,可以參考一二。

索引;索引是關(guān)系型數(shù)據(jù)庫中SQL優(yōu)化的利器,設(shè)計(jì)良好的索引以及在SQL中正確應(yīng)用索引基本上能解決大部分的SQL優(yōu)化問題??梢酝ㄟ^執(zhí)行計(jì)劃分析SQL中索引的應(yīng)用情況。

變通;3+6與4+5的結(jié)果都是9,做事的方式并不是唯一的,可能一種SQL寫法效率很低,然而你換一個(gè)思路試試其他的寫法,效率會(huì)有很大的提升,這個(gè)需要不斷的嘗試和摸索。

舉個(gè)栗子,以O(shè)racle為例查詢公司男性與女性員工的薪資總和

select  

(select sum(salary) from employee where sex='男')  男性薪資總和,

(select sum(salary) from employee where sex='女')  女性薪資總和

from dual

更好的寫法應(yīng)該是

select

sum(case when sex='男' then salary else 0 end) 男性薪資總和,

sum(case when sex='女' then salary else 0 end) 女性薪資總和

from employee

我剛?cè)腴TSQL時(shí),就是采用了第一種寫法,邏輯最簡(jiǎn)單明了,但是一個(gè)employee表卻被掃描了兩次(在沒有索引的情況下),隨著數(shù)據(jù)量的增加,這條SQL必然出現(xiàn)效率低的問題,第二種寫法就會(huì)優(yōu)化很多,效率更高。這是一個(gè)簡(jiǎn)單不能再簡(jiǎn)單的變通了(當(dāng)然是現(xiàn)在看來,當(dāng)時(shí)可能想不到)。

分解;把復(fù)雜的一條SQL可以拆解為多條簡(jiǎn)單SQL分步驟執(zhí)行,可能你會(huì)覺得分步驟執(zhí)行做了很多額外的工作,但是每條簡(jiǎn)單的SQL執(zhí)行的會(huì)非??欤w上提升了SQL執(zhí)行效率。

SQL分解最常用的就是創(chuàng)建中間表,中間表只保存需要的字段和數(shù)據(jù)行,同時(shí)增加必要的索引,可大大提升SQL的執(zhí)行效率。

環(huán)境;SQL優(yōu)化要在同一個(gè)環(huán)境中進(jìn)行,不同的環(huán)境中SQL執(zhí)行路徑可能是不同的,優(yōu)化的方法也是不同的。盡量排除環(huán)境因素對(duì)SQL優(yōu)化的影響。

經(jīng)驗(yàn);經(jīng)驗(yàn)很重要,但是避免陷入經(jīng)驗(yàn)主義。你可能在Oracle中有著非常豐富的SQL優(yōu)化經(jīng)驗(yàn),但是在DB2數(shù)據(jù)庫中可能就不靈了,不要糾結(jié),這很正常。在我從Oracle數(shù)據(jù)庫轉(zhuǎn)向DB2數(shù)據(jù)庫時(shí)就出現(xiàn)了很多問題,在Oracle中積累的經(jīng)驗(yàn)轉(zhuǎn)移到DB2中行不通,只能另辟蹊徑。

SQL優(yōu)化需要經(jīng)驗(yàn),但是不能太依賴經(jīng)驗(yàn),要不斷調(diào)整自己的思路。每款數(shù)據(jù)庫產(chǎn)品都有自己的特點(diǎn),要了解它們,然后去不斷應(yīng)用。好在大部分的經(jīng)驗(yàn)是通用的,只是略加調(diào)整即可,不要太大壓力。

把平時(shí)優(yōu)化SQL的技巧和方法總結(jié)下來,在真實(shí)的SQL優(yōu)化場(chǎng)景中反復(fù)使用和調(diào)整,逐漸形成自己的一套優(yōu)化經(jīng)驗(yàn)。

關(guān)于“如何讓SQL再快一點(diǎn)兒”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。


當(dāng)前文章:如何讓SQL再快一點(diǎn)兒
鏈接URL:http://weahome.cn/article/gdpdii.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部