成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

說說Top子句對查詢計劃的影響

運維 數據庫運維 SQL Server
之前我們談論過SQL數據庫中"簡單的"SELECT TOP中大家可能沒有注意到的細節(jié)。今天將和大家分享Top子句對查詢計劃的影響——簡單說慎用TOP。

1子查詢的影響

Nest loop適用于被連接的數據

如果兩個表做join操作,會有三種join方式: Nested join, Merge Join, Hash Join

Nested Join適用于結果集較小表

Hash Join適用于結果集很大的表

示例如下

  1. create table moderatetable1(id int identity(1,1) primary key, c1 int ,c2 int,c3 int,c4 int)  
  2. create table moderatetable2(id int identity(1,1) primary key, c1 int ,c2 int,c3 int,c4 int)  
  3. declare @n int=0  
  4. while @n<100000  
  5. begin 
  6. insert moderatetable1(c1,c2,c3,c4) values(@n,@n,@n,@n)  
  7. insert moderatetable2(c1,c2,c3,c4) values(@n,@n,@n,@n)  
  8. set @n+=1  
  9. end 
  10. create index index1 on moderatetable1(C1)  
  11. create index index1 on moderatetable2(C2)  
  12. go  
  13. set statistics io on 
  14. select t1.c1 from moderatetable1 t1 inner join moderatetable2 t2  
  15. on t1.c1=t2.c1  
  16. go 

下圖是上面查詢的執(zhí)行計劃和io統(tǒng)計信息

 

IO情況

(100000 行受影響)

表 'Worktable'。掃描計數 0,邏輯讀取 0 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。

表 'moderatetable2'。掃描計數 1,邏輯讀取 361 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。

表 'moderatetable1'。掃描計數 1,邏輯讀取 176 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。

(1 行受影響)

如果只想取前50行,可以指定top 50:

  1. select top 50 t1.c1 from moderatetable1 t1 inner join moderatetable2 t2 
  2. on t1.c1=t2.c1

 

(50 行受影響)

表 'moderatetable1'。掃描計數 50,邏輯讀取 124 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。

表 'moderatetable2'。掃描計數 1,邏輯讀取 2 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。

(1 行受影響)

我們看到,當指定了top 50之后,查詢計劃成了nested join. 當使用TOP時,SQLSEVER會認為這是一個較小的數據集,所以會使用nested join.對于這個查詢,IO的開銷比較李小. 但SQLSERVER經常會估計錯誤(即使統(tǒng)計信息是正確的).

我們看一下下面的查詢:

  1. select top 500 t1.c1 from moderatetable1 t1 inner join moderatetable2 t2  
  2. on t1.c1=t2.c1 
 

 

(500 行受影響)

表 'moderatetable1'。掃描計數 500,邏輯讀取 1080 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。

表 'moderatetable2'。掃描計數 1,邏輯讀取 4 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。

(1 行受影響)

返回行數增加到了500,SQLSERVER仍然使用nested join,得到了較差的IO

隨著TOP的行數的增多,IO開銷會越來越大. 但也不是總是這樣,當top值達到一個臨界點后,執(zhí)行計劃會變更成hash join.

  1. select top 20000 t1.c1 from moderatetable1 t1 inner join moderatetable2 t2  
  2. on t1.c1=t2.c1 

 

(20000 行受影響)

表 'Worktable'。掃描計數 0,邏輯讀取 0 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。

表 'moderatetable2'。掃描計數 1,邏輯讀取 74 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。

表 'moderatetable1'。掃描計數 1,邏輯讀取 176 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。

(1 行受影響)

慎用TOP ...

原文鏈接:http://www.cnblogs.com/stswordman/archive/2011/06/14/2080396.html

【編輯推薦】

  1. 分析TOP語句放到表值函數外,效率異常低下的原因
  2. 雙TOP二分法生成分頁SQL類
  3. SQL Server數據庫中簡單的SELECT TOP
  4. 利用top構造Sql Server分頁查詢
責任編輯:艾婧 來源: stswordman的博客
相關推薦

2011-08-04 13:07:59

數據庫查詢TOP子句

2020-12-04 07:51:24

CQRS模型查詢

2025-05-09 09:07:45

2017-09-22 11:01:00

Oracle數據庫中直方圖

2009-09-16 13:02:12

LINQ查詢子句

2013-09-29 09:49:04

編程生活方式

2011-06-01 17:45:22

SEO

2015-11-04 14:03:44

BYOD自帶設備企業(yè)

2010-04-02 15:04:14

Oracle遞歸查詢

2011-05-06 16:22:58

2014-07-22 09:25:48

LTEPTN4G

2022-11-17 08:00:18

JavaScript錯誤性能

2022-09-27 15:00:18

物聯(lián)網IoT

2011-05-24 16:01:51

OpenFlow影響

2021-10-13 22:38:42

數字貨幣貨幣人類

2022-12-15 08:00:38

JavaScript錯誤性能

2023-09-05 15:48:00

2013-03-28 10:53:11

2021-07-16 07:57:34

ReduxDOM組件

2021-11-25 10:18:42

RESTfulJava互聯(lián)網
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品视频一区在线 | 久久国产成人午夜av影院武则天 | 国产免费xxx | 欧美黄色一级毛片 | 在线一区二区三区 | 亚洲高清在线观看 | 在线观看亚洲专区 | 国产一区二区在线观看视频 | 国产精品一区二区无线 | 久久久久国产一区二区三区不卡 | 欧美一级免费看 | 国产精品成人一区二区三区吃奶 | 久久久久久久综合 | www久| 超级乱淫av片免费播放 | 午夜免费成人 | 国产精品久久久久久一区二区三区 | 狠狠干美女 | 中文字幕不卡在线观看 | 日本黄色免费大片 | 国产精品视频免费播放 | 日韩精品在线播放 | 色吧综合 | 亚洲一区综合 | 精品亚洲第一 | 国产精品揄拍一区二区 | 岛国av一区二区三区 | 久久精品超碰 | 成人欧美一区二区三区在线播放 | 国产精品96久久久久久 | 九九av | 欧美美女爱爱视频 | 久久综合九九 | 亚洲精品国产一区 | 国产精品成人一区二区 | 欧美一区二区三区久久精品视 | 久久99精品久久久久久噜噜 | 日韩一区二区免费视频 | 国产99久久精品一区二区永久免费 | 欧美视频区 | 久久国产精品无码网站 |