国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

sqlserver關(guān)于分頁存儲(chǔ)過程的優(yōu)化【讓數(shù)據(jù)庫按我們的意思執(zhí)行查詢計(jì)劃】

2020-07-25 13:21:46
字體:
供稿:網(wǎng)友
復(fù)制代碼 代碼如下:

--代碼一DECLARE @cc INT
SELECT NewsId,ROW_NUMBER() OVER(ORDER BY SortNum DESC) AS RowIndex INTO #tb FROM news WITH(NOLOCK) WHERE NewsTypeId=@NewsTypeId AND IsShow=1
SET @cc = @@ROWCOUNT
SELECT n.* FROM news AS n WITH(NOLOCK), #tb As t WHERE t.RowIndex>@PageIndex*@PageSize AND t.RowIndex<=(@PageIndex+1)*@PageSize AND t.newsid=n.newsid
SELECT @cc
DROP TABLE #tb

復(fù)制代碼 代碼如下:

--代碼二
DECLARE @cc INT
SELECT NewsId,ROW_NUMBER() OVER(ORDER BY SortNum DESC) AS RowIndex INTO #tb FROM news WITH(NOLOCK) WHERE NewsTypeId=@NewsTypeId AND IsShow=1
SET @cc = @@ROWCOUNT
SELECT NewsId INTO #tb2 FROM #tb As t WHERE t.RowIndex>@PageIndex*@PageSize AND t.RowIndex<=(@PageIndex+1)*@PageSize
SELECT * FROM news WITH(NOLOCK) WHERE NewsId IN (SELECT * FROM #tb2)
SELECT @cc
DROP TABLE #tb
DROP TABLE #tb2

答案是代碼二遠(yuǎn)遠(yuǎn)高于代碼一。在代碼一中加粗代碼的操作會(huì)引起整表掃描,因?yàn)閿?shù)據(jù)庫引擎在認(rèn)為WHERE表達(dá)式中滿足條件記錄大于一定閥值的時(shí)候,就不再去進(jìn)行查詢優(yōu)化,而直接使用表掃描。看執(zhí)行信息,:
表 'news'。掃描計(jì)數(shù) 1,邏輯讀取 342 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
(98361 行受影響)
(1 行受影響)
(40 行受影響)
表 '#tb________________________________________00000004C024'。掃描計(jì)數(shù) 1,邏輯讀取 257 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'news'。掃描計(jì)數(shù) 1,邏輯讀取 2805 次,物理讀取 0 次,預(yù)讀 235 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
(1 行受影響)
(1 行受影響)

原本,我想的執(zhí)行計(jì)劃,加粗部分的代碼應(yīng)該是聚焦索引查找,這樣性能就提高很多。看代碼二:
表 'news'。掃描計(jì)數(shù) 1,邏輯讀取 342 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
(98361 行受影響)
(1 行受影響)
表 '#tb____________________________________00000004BEEF'。掃描計(jì)數(shù) 1,邏輯讀取 257 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
(40 行受影響)
(1 行受影響)
(40 行受影響)
表 'news'。掃描計(jì)數(shù) 0,邏輯讀取 131 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 '#tb2___________________________________00000004BEF0'。掃描計(jì)數(shù) 1,邏輯讀取 2 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
(1 行受影響)
(1 行受影響)

很明顯,代碼二與代碼一中的IO操作數(shù)大大降低。且代碼一隨著@PageIndex越來越大,效率會(huì)越來越低;但代碼二的效率不會(huì)隨@PageIndex變化而改變。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 綦江县| 石狮市| 晴隆县| 蓝田县| 和林格尔县| 鄯善县| 临高县| 砚山县| 固镇县| 阳谷县| 南澳县| 宜宾县| 肥城市| 岱山县| 乌兰县| 丹凤县| 双柏县| 贵港市| 西华县| 肥乡县| 松桃| 汉源县| 镇安县| 左权县| 永城市| 江源县| 当阳市| 柘城县| 南汇区| 徐闻县| 诏安县| 清水河县| 武胜县| 政和县| 芒康县| 张家口市| 定安县| 靖州| 页游| 进贤县| 长汀县|