SQL優(yōu)化:不查詢多余的列和行
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
示例數(shù)據(jù)庫(kù)可以在閱讀原文處獲取。下面使用的示例是AdventureWorks2012的備份包,小伙伴下載后還原即可。記得數(shù)據(jù)庫(kù)要是高版本的才能還原成功,我使用的數(shù)據(jù)庫(kù)是SQL Server 2016版本的。 1.不查詢多余的列 查詢過(guò)程中經(jīng)常為了省事,而直接使用*來(lái)代替所有的列,好處是不需要寫(xiě)明列。壞處就是遇到列比較多的表查詢效率就大大折扣了。例如:
我們執(zhí)行一下可以看到如下信息: 上面的相關(guān)信息我給大家解讀一下: 掃描計(jì)數(shù):索引或表掃描次數(shù) 邏輯讀取:數(shù)據(jù)緩存中讀取的頁(yè)數(shù) 物理讀取:從磁盤中讀取的頁(yè)數(shù) 預(yù)讀:查詢過(guò)程中,從磁盤放入緩存的頁(yè)數(shù) lob邏輯讀取:從數(shù)據(jù)緩存中讀取,image,text,ntext或大型數(shù)據(jù)的頁(yè)數(shù) lob物理讀取:從磁盤中讀取,image,text,ntext或大型數(shù)據(jù)的頁(yè)數(shù) lob預(yù)讀:查詢過(guò)程中,從磁盤放入緩存的image,text,ntext或大型數(shù)據(jù)的頁(yè)數(shù) 語(yǔ)句的CPU時(shí)間分編譯階段和執(zhí)行階段。 CPU時(shí)間是指:執(zhí)行語(yǔ)句的時(shí)間 占用時(shí)間是指:從磁盤讀取數(shù)據(jù)再處理總的使用時(shí)間 編譯階段: SQL Server 分析和編譯時(shí)間: 執(zhí)行階段: SQL Server 執(zhí)行時(shí)間: 這些信息我們以后都會(huì)經(jīng)??吹降?,這是判斷一個(gè)查詢語(yǔ)句最直觀的方式。 Q:上面的消息界面是怎么出來(lái)的呢? A:點(diǎn)擊菜單欄的查詢——查詢選項(xiàng)...——高級(jí),將SET STATISTICS TIME和SET STATISTICS IO都勾選上就可以了 我們?cè)賳为?dú)查詢一列看會(huì)怎么樣?例如:
我們執(zhí)行一下可以看到如下信息: 通過(guò)上面的時(shí)間對(duì)比我們就可以清楚的看到:將列名明確的列出,不顯示不相關(guān)的列效率有很大的提升。 這里就是大家經(jīng)??吹降囊粭l優(yōu)化建議:不要直接使用*進(jìn)行查詢,而只查詢需要的列。 2.不查詢多余的行
我們執(zhí)行一下可以看到如下信息: 所占用的時(shí)間成倍的減少,效果顯而易見(jiàn)。
我們執(zhí)行一下可以看到如下信息: 可能有些同學(xué)對(duì)DISTINCT關(guān)鍵字有不同的看發(fā),稍后我們根據(jù)具體情況再逐一給大家進(jìn)行分析。 今天的課就講到這里,小伙伴可以動(dòng)手嘗試一下。 閱讀原文:原文鏈接 該文章在 2025/6/23 12:51:27 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |