以淘寶商品搜索漫談查詢條件的排序對效率的影響(SQL查詢性能優化,附調優(性能診斷)DMV)

   有時候一個念頭或想法在不經意間蹦出——就像是一段美好的邂逅,讓人淡然而有些欣喜。寫這篇博客的由來也是如此,——“查詢條件的排序的不同可能會對查詢效率有影響”的想法突然出現在我的腦海裏,而且我饒有興致的細想了下,經過測試,但無奈的是我本地只有2w多的數據量,數據量太小,無法測試出其真實的結果,這也是爲何這篇博客的標題中說是'漫談'的原因;'漫談'很可能就是亂彈,我所說的只是我想當然的,未經證實;但我仍想也感覺有必要把所考慮的跟大家分享交流下,就是板兒磚滿天飛也無所謂,以求正解!

  

    如上圖,就是淘寶網的商品搜索頁,我所要說的會直截了當的圍繞上圖談起——只用看上圖中綠色框部分,對於搜索功能的sql查詢,分別是 價格分類 這兩個查詢(where)條件,單就(where)條件的拼接有以下兩種寫法(以下sql只是爲了輔助說明我的想法而已,非淘寶真實實現):

    1.select * from product where price>=45 and price<=138 and category='恆源祥'

    2.select * from product where category='恆源祥' and price>=45 and price<=138

    兩條sql看起來一樣,最後查詢到的結果也相同,只是查詢條件價格分類的順序不同。以

   如果我以上的設想或考慮成立,我倒是感覺爲了提高查詢效率,應該在每個項目的後臺管理中可以動態根據不同時期或情況設置數據查詢各個條件的排序。

   此文就寫到這裏,提出兩個問題,希望知道的朋友能不吝賜教!

       Q1:數據庫sql查詢分析引擎是否會對查詢sql語句進行優化或其它處理?

   Q2:本文所說的觀點是否正確?

   最後,附上SQL Server調優(性能診斷)DMV查詢SQL,希望對需要的朋友有所幫助。

 1 set transaction isolation level read uncommitted   2    3 select top 20   4 CAST(qs.total_elapsed_time/1000000.0 as decimal(28,2))   5 as [Total Elapsed Duration (s)]   6 ,qs.execution_count   7 ,SUBSTRING(qt.text,(qs.statement_start_offset/2)+1,   8 ((Case when qs.statement_end_offset=-1   9 Then len(CONVERT(Nvarchar(max),qt.text))*2  10 else  11 qs.statement_end_offset  12 end - qs.statement_start_offset)/2)+1) as [Individual Query]  13 ,qt.text as [Parent Query]  14 ,DB_NAME(qt.dbid) as databseName  15 ,qp.query_plan  16 from sys.dm_exec_query_stats qs  17 cross apply sys.dm_exec_sql_text(qs.sql_handle) qt  18 cross apply sys.dm_exec_query_plan(qs.plan_handle) qp  19   20 order by total_elapsed_time desc

  查詢結果如下:

  

      通過以上查詢可以得到最消耗性能的前20條SQL語句,並對其進行優化處理!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章