上篇介紹了一下自己在項目中遇到的一種使用sql語句的優(yōu)化方式(性能優(yōu)化——SQL語句),但是說的不夠完整。在對比的過程中,沒有將max函數(shù)考慮在內(nèi),經(jīng)人提醒之后趕緊做了一個測試,測試過程中又學到了不少的東西。
上次用的是select count(*) 和select * 的執(zhí)行效率問題,因為我的需求是獲取數(shù)據(jù)的一個總數(shù)來自動給出新的id,然后網(wǎng)友給出可以使用max的方式給出新id。其實這也是一種不錯的思路(當時我們也用過該函數(shù),只不過因為系統(tǒng)數(shù)據(jù)本身問題,不適合用該函數(shù)),然后我就對max函數(shù)的性能做了一下測試。
第一次測試:
Declare @dddd Datetime Set @dddd=GETDATE()
select MAX(num) from T_BasicInformation
select [花費時間]=DATEDIFF(ms,@dddd,GetDate())
測試結果:
![](/d/20211017/bfa1c5c8911055c191503d26289ed147.gif)
通過對比發(fā)現(xiàn),使用該方法的執(zhí)行效率貌似不如select count(*) 的效率高(當時測得的時間為3ms),那么事實真的是這樣嗎?后來查了一些資料,發(fā)現(xiàn)其實max的效率相對來說會更高,那么為什么我們的測試結果會是這樣的呢?咱們接著進行測試
第二次測試:
①語句一
Declare @ddd Datetime Set @ddd=GETDATE()
select MAX(id) from t_SellLogDetail
select [花費時間]=DATEDIFF(ms,@ddd,GetDate())
測試結果:
![](/d/20211017/714f602e9fe6c0981f76f73f78cdcb06.gif)
②語句二
Declare @dddd Datetime Set @dddd=GETDATE()
select MAX(foodId) from t_SellLogDetail
select [花費時間]=DATEDIFF(ms,@dddd,GetDate())
測試結果:
![](/d/20211017/d983c5dc2a8d5b6bb52f5df7eb47e3e1.gif)
③語句三
Declare @ddddd Datetime Set @ddddd=GETDATE()
select MAX(orderId) from t_SellLogDetail
select [花費時間]=DATEDIFF(ms,@ddddd,GetDate())
測試結果:
![](/d/20211017/e8948d718d70aedd6d16f13664b4c591.gif)
做完第二次測試會發(fā)現(xiàn),同樣的表,不同的字段,其max函數(shù)執(zhí)行效果就不一樣。然后就從數(shù)據(jù)類型出發(fā)了,數(shù)據(jù)類型如下:
![](/d/20211017/927c0e43018b74d12573f08a7d0cb380.gif)
這樣的話,我們的測試結果不同問題就迎刃而解了,在max函數(shù)的執(zhí)行過程中,會根據(jù)數(shù)據(jù)類型的不同而有不同的執(zhí)行效率。如果是主鍵且為整型,其效率是最高的;而非主鍵時,int的效率又會高于字符類型。其實這些都很容易理解,各有各的使用方式。
小結:
第一次測試完之后就沒有考慮其他的東西,后來又發(fā)現(xiàn)在max中還有一些需要注意的地方。所以,在我們平常的學習中,一定要學會拓展學習,不要僅僅限于自己想要的結果。得到結果固然是系統(tǒng)需要的,但是對于處于學習期的我們,這遠遠不夠,我們要不斷的探索,才能贏得更大的進步。
關于SQL語句性能優(yōu)化,小編就給大家介紹到這里,希望對大家有所幫助!
您可能感興趣的文章:- 淺談MySQL中優(yōu)化sql語句查詢常用的30種方法
- sql語句優(yōu)化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的語句
- SQL語句優(yōu)化方法30例(推薦)
- 如何優(yōu)化SQL語句的心得淺談
- SQL 語句優(yōu)化方法30例
- 如何優(yōu)化SQL語句(全)
- 通過分析SQL語句的執(zhí)行計劃優(yōu)化SQL
- 常用SQL語句優(yōu)化技巧總結【經(jīng)典】
- SQL語句優(yōu)化提高數(shù)據(jù)庫性能
- sql語句優(yōu)化的一般步驟詳解