SQL語句性能優(yōu)化(續(xù))
上篇介紹了一下自己在項(xiàng)目中遇到的一種使用sql語句的優(yōu)化方式(性能優(yōu)化——SQL語句),但是說的不夠完整。在對(duì)比的過程中,沒有將max函數(shù)考慮在內(nèi),經(jīng)人提醒之后趕緊做了一個(gè)測(cè)試,測(cè)試過程中又學(xué)到了不少的東西。
上次用的是select count(*) 和select * 的執(zhí)行效率問題,因?yàn)槲业男枨笫谦@取數(shù)據(jù)的一個(gè)總數(shù)來自動(dòng)給出新的id,然后網(wǎng)友給出可以使用max的方式給出新id。其實(shí)這也是一種不錯(cuò)的思路(當(dāng)時(shí)我們也用過該函數(shù),只不過因?yàn)橄到y(tǒng)數(shù)據(jù)本身問題,不適合用該函數(shù)),然后我就對(duì)max函數(shù)的性能做了一下測(cè)試。
第一次測(cè)試:
Declare @dddd Datetime Set @dddd=GETDATE() select MAX(num) from T_BasicInformation select [花費(fèi)時(shí)間]=DATEDIFF(ms,@dddd,GetDate())
測(cè)試結(jié)果:
通過對(duì)比發(fā)現(xiàn),使用該方法的執(zhí)行效率貌似不如select count(*) 的效率高(當(dāng)時(shí)測(cè)得的時(shí)間為3ms),那么事實(shí)真的是這樣嗎?后來查了一些資料,發(fā)現(xiàn)其實(shí)max的效率相對(duì)來說會(huì)更高,那么為什么我們的測(cè)試結(jié)果會(huì)是這樣的呢?咱們接著進(jìn)行測(cè)試
第二次測(cè)試:
①語句一
Declare @ddd Datetime Set @ddd=GETDATE() select MAX(id) from t_SellLogDetail select [花費(fèi)時(shí)間]=DATEDIFF(ms,@ddd,GetDate())
測(cè)試結(jié)果:
②語句二
Declare @dddd Datetime Set @dddd=GETDATE() select MAX(foodId) from t_SellLogDetail select [花費(fèi)時(shí)間]=DATEDIFF(ms,@dddd,GetDate())
測(cè)試結(jié)果:
③語句三
Declare @ddddd Datetime Set @ddddd=GETDATE() select MAX(orderId) from t_SellLogDetail select [花費(fèi)時(shí)間]=DATEDIFF(ms,@ddddd,GetDate())
測(cè)試結(jié)果:
做完第二次測(cè)試會(huì)發(fā)現(xiàn),同樣的表,不同的字段,其max函數(shù)執(zhí)行效果就不一樣。然后就從數(shù)據(jù)類型出發(fā)了,數(shù)據(jù)類型如下:
這樣的話,我們的測(cè)試結(jié)果不同問題就迎刃而解了,在max函數(shù)的執(zhí)行過程中,會(huì)根據(jù)數(shù)據(jù)類型的不同而有不同的執(zhí)行效率。如果是主鍵且為整型,其效率是最高的;而非主鍵時(shí),int的效率又會(huì)高于字符類型。其實(shí)這些都很容易理解,各有各的使用方式。
小結(jié):
第一次測(cè)試完之后就沒有考慮其他的東西,后來又發(fā)現(xiàn)在max中還有一些需要注意的地方。所以,在我們平常的學(xué)習(xí)中,一定要學(xué)會(huì)拓展學(xué)習(xí),不要僅僅限于自己想要的結(jié)果。得到結(jié)果固然是系統(tǒng)需要的,但是對(duì)于處于學(xué)習(xí)期的我們,這遠(yuǎn)遠(yuǎn)不夠,我們要不斷的探索,才能贏得更大的進(jìn)步。
關(guān)于SQL語句性能優(yōu)化,小編就給大家介紹到這里,希望對(duì)大家有所幫助!
相關(guān)文章
IP連接SQL SERVER失敗(配置為字符串失敗)圖文解決方法
這篇文章主要介紹了使用IP連接SQL SERVER失敗和配置為連接字符串連接失敗的解決方法,大家參考使用2013-11-11如何統(tǒng)計(jì)全天各個(gè)時(shí)間段產(chǎn)品銷量情況(sqlserver)
對(duì)一個(gè)賣場(chǎng)來說,肯定有負(fù)責(zé)人每天定時(shí)去統(tǒng)計(jì)每天各個(gè)時(shí)間段產(chǎn)品銷量情況,以此保證賣場(chǎng)長期可持續(xù)發(fā)展,有的用excel表統(tǒng)計(jì),但是用起來很不方便,下面給大家介紹sqlserver版如何統(tǒng)計(jì)全天各個(gè)時(shí)間段產(chǎn)品銷量情況2015-08-08清除SQL?Server數(shù)據(jù)庫日志(ldf文件)的方法匯總
隨著系統(tǒng)運(yùn)行時(shí)間的推移,數(shù)據(jù)庫日志文件會(huì)變得越來越大,這時(shí)我們需要對(duì)日志文件進(jìn)行備份或清理,這篇文章主要介紹了清除SQL?Server數(shù)據(jù)庫日志(ldf文件)的幾種方法,需要的朋友可以參考下2022-10-10數(shù)據(jù)庫初始化及數(shù)據(jù)庫服務(wù)端操作詳解
這篇文章主要為大家介紹了數(shù)據(jù)庫初始化及數(shù)據(jù)庫服務(wù)端操作的過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2021-11-11Cont()與Where().Count()有時(shí)性能差別如此之大!
今天在修改后臺(tái)用戶公司管理列表時(shí),發(fā)現(xiàn)列表加載超慢的bug!好幾十秒?。?shù)據(jù)是相對(duì)其他的列表是稍微多點(diǎn),不過也就4000多條,之前是好的,為啥這么慢呢?2010-03-03