這篇文章主要介紹“如何優(yōu)化SQL語句”,在日常操作中,相信很多人在如何優(yōu)化SQL語句問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”如何優(yōu)化SQL語句”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比固安網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式固安網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋固安地區(qū)。費(fèi)用合理售后完善,十年實(shí)體公司更值得信賴。
查詢過程中經(jīng)常為了省事,而直接使用*來代替所有的列,好處是不需要寫明列。壞處就是遇到列比較多的表查詢效率就大大折扣了。例如:
SELECT * FROM [Sales].[SalesOrderDetail];
我們執(zhí)行一下可以看到如下信息:
Q:上面的消息界面是怎么出來的呢?
A:點(diǎn)擊菜單欄的查詢——查詢選項(xiàng)...——高級(jí),將SET STATISTICS TIME和SET STATISTICS IO都勾選上就可以了
上面的相關(guān)信息我給大家解讀一下:
掃描計(jì)數(shù):索引或表掃描次數(shù)
邏輯讀取:數(shù)據(jù)緩存中讀取的頁數(shù)
物理讀?。簭拇疟P中讀取的頁數(shù)
預(yù)讀:查詢過程中,從磁盤放入緩存的頁數(shù)
lob邏輯讀?。簭臄?shù)據(jù)緩存中讀取,image,text,ntext或大型數(shù)據(jù)的頁數(shù)
lob物理讀?。簭拇疟P中讀取,image,text,ntext或大型數(shù)據(jù)的頁數(shù)
lob預(yù)讀:查詢過程中,從磁盤放入緩存的image,text,ntext或大型數(shù)據(jù)的頁數(shù)
語句的CPU時(shí)間分編譯階段和執(zhí)行階段。
CPU時(shí)間是指:執(zhí)行語句的時(shí)間
占用時(shí)間是指:從磁盤讀取數(shù)據(jù)再處理總的使用時(shí)間
編譯階段:
SQL Server 分析和編譯時(shí)間:
執(zhí)行階段:
SQL Server 執(zhí)行時(shí)間:
這些信息我們以后都會(huì)經(jīng)??吹降模@是判斷一個(gè)查詢語句最直觀的方式。
我們?cè)賳为?dú)查詢一列看會(huì)怎么樣?例如:
SELECT UnitPrice FROM [Sales].[SalesOrderDetail];
我們執(zhí)行一下可以看到如下信息:
通過上面的時(shí)間對(duì)比我們就可以清楚的看到:將列名明確的列出,不顯示不相關(guān)的列效率有很大的提升。
這里就是大家經(jīng)??吹降囊粭l優(yōu)化建議:不要直接使用*進(jìn)行查詢,而只查詢需要的列。
當(dāng)然如果本身有需要查看全表內(nèi)容,就不在此條優(yōu)化之列了。
在查詢的時(shí)候使用WHERE關(guān)鍵字可以很好的過濾掉不需要的行。這也是提高查詢效率的一種方式,其實(shí)這才是WHERE關(guān)鍵字存在的意義。
例如:
SELECT UnitPrice FROM [Sales].[SalesOrderDetail] WHERE UnitPrice>1000;
我們執(zhí)行一下可以看到如下信息:
所占用的時(shí)間成倍的減少,效果顯而易見。
使用DISTINCT關(guān)鍵字減少多余重復(fù)的行。
例如:
SELECT DISTINCT UnitPrice FROM [Sales].[SalesOrderDetail] WHERE UnitPrice>1000;
我們執(zhí)行一下可以看到如下信息:
我們發(fā)現(xiàn),在某些情況下DISTINCT也可以加快數(shù)據(jù)的查詢效率。
到此,關(guān)于“如何優(yōu)化SQL語句”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!