發表文章

目前顯示的是有「SQL查詢效能提升」標籤的文章

T-SQL筆記38_改善SQL分頁查詢效能_sp_cursoropen 和 sp_cursorfetch

圖片
  之前有分享過 分頁寫法 這次遇到其他種分頁作法 舊系統分頁查詢SP 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Create proc [dbo].[SSP_GetPage] ( @sqlstr nvarchar( 4000 ), @pagepos int = 1 , @pagesize int = 99999999 , @recsize int output ) as begin set nocount on declare @P1 int ,@P2 int ,@P3 int ,@reccount int set @pagepos=(@pagepos- 1 )*@pagesize+ 1 exec sp_cursoropen @P1 output , @sqlstr , 1 , 8193 , @recsize output exec sp_cursorfetch @P1, 16 ,@pagepos,@pagesize exec sp_cursorclose @P1 end 這段程式碼定義了一個名為 SSP_GetPage 的存儲過程。該過程接受四個參數: @sqlstr:一個字符串參數,用於指定將要執行的 SQL 陳述式。 @pagepos:一個整數參數,指定要檢索的記錄起始位置,默認為 1。 @pagesize:一個整數參數,指定要檢索的記錄數目,默認為 99999999。 @recsize:一個輸出參數,指定檢索到的記錄數目。 在存儲過程的主體中,首先使用 set nocount on 語句來禁用向客戶端返回計數信息的功能。 然後聲明了四個整型變量 @P1、@P2、@P3 和 @reccount。 接下來,根據 @pagepos 和 @pagesize 計算要檢索的記錄起始位置,然後執行 sp_cursoropen 系統存儲過程來打開游標,使用 sp...

T-SQL筆記3_索引觀念 和 B-Tree(SQL))_Performance Tuning技巧

圖片
想想當我們以前在使用國語辭典時若不透過部首、筆劃來查對應出現頁數時 此時一定是從第一頁慢慢翻直到找到目標為止 因此索引在日常生活中很常用到 包括以前常見的電話簿用姓名筆劃、住址來排 書本前面的章節用字母來排序等等 結構化查詢一般的運作 採用 Full-Scan 機制 或 循序搜尋(Sequential Search) -->未先排序 也就是 當你要在一萬筆資料群的資料表中查找到特定匹配條件的 單筆或多筆資料時 會 從頭掃描整張表一遍 直到查詢到目標為止。 想當然這種查詢是十分沒有效率的!! 所以在資料結構應用上使用不同演算做法 會有不同回饋!!! 舉例: 同樣一組數據序列 用不同查詢下所產生的比對次數就有明顯的差異 循序(線性)查詢 非循序(非線性)查詢 E.g. 二元(分/岔) 資料庫之索引 這裡我們拿一本書最後頭的索引 來做一個生活例子比擬 你會看到一些常看或市面上書籍 後面都會有依照可能是英文字母開頭做排序的 以中文字典的部分則可能是用  部首、注音、筆畫 去做查詢索引 https://www.prismnet.com/~hcexres/textbook/indexing.html http://gimilee.pixnet.net/blog/post/209620930-大推薦-全方位造詞造句大詞典 藉由  Index 我們可以更快速找到我們想要的目標開頭為X的字眼 在SQL Server這部分是採用 B-Tree(B型束狀結構) B樹(B-Tree)  在你瞭解這個名詞前 可能需要先有關於樹的一些先備知識 Tree資料結構專術語(行話)介紹: 1.節點(Node):每一項data(資料值) -->A ,B ,C......,L 2.樹根(Root):每一棵樹最上層之節點 --> A 3.子樹(Sub Tree):去除樹根(A)後 , 所剩之以B、C、D為樹根之三棵樹也就是「子樹」 4.邊(Edge):節點之間的連線。 5.樹葉(Leaf):下方無串接任一節點(最末端)。換言之,就是分支度為0的節點,又稱終端節點。 6.樹林(Forest):去除樹根後剩餘的部分(三個...