🚫 Ad Blocker Detected

Please disable your AD blocker to continue using this site. Ads help us keep the content free! please press keyboard F5 to refresh page after disabled AD blocker

請關閉廣告攔截器以繼續使用本網站。廣告有助於我們保證內容免費。謝謝! 關閉後請按 F5 刷新頁面

0%

什麼是統計值

SQL Server的QO(Query Optimizer)透過cost-based model來選擇一個最合適計畫(估算成本最低)來執行查詢

 注意每個執行計畫是使用CPU來做估算,使用過的執行計畫一般會Cache起來已便下次使用

QO會依照基數估計(Cardinality estimation)來產生執行計畫,基數估計扮演一個很重要的角色

SQL Server統計值是對於每個Index或欄位資料分布做紀錄,任何型態都支援統計值資料.

過期的統計值資料導致QO誤判產生不良執行計畫

在我們建立Index時,統計值會自動創建。此外當欄位在查詢裡被使用(作為WHERE條件的一部分,group by子句,join條件)統計值會被自動建立

何時建立統計值?

每個索引都會有自己個統計資訊,在UI查看統計資訊如下圖.

Read more »

什麼是統計值

SQL Server的QO(Query Optimizer)透過cost-based model來選擇一個最合適計畫(估算成本最低)來執行查詢

 注意每個執行計畫是使用CPU來做估算,使用過的執行計畫一般會Cache起來已便下次使用

QO會依照基數估計(Cardinality estimation)來產生執行計畫,基數估計扮演一個很重要的角色

SQL Server統計值是對於每個Index或欄位資料分布做紀錄,任何型態都支援統計值資料.

過期的統計值資料導致QO誤判產生不良執行計畫

在我們建立Index時,統計值會自動創建。此外當欄位在查詢裡被使用(作為WHERE條件的一部分,group by子句,join條件)統計值會被自動建立

何時建立統計值?

每個索引都會有自己個統計資訊,在UI查看統計資訊如下圖.

Read more »

前文

現在CICD越來越普遍,如要提高開發效率和自動化部屬跟Deploy系統有密不可分關係.

今天跟大家分享我開源專案ElectronicInvoice_TW如何利用
Github + Appveyor 來完成自動Deploy Package至Nuget上.

關於Appveyor

Appveyor是一個CI平台,可以透過Github Webhock來觸發一列動作來完成自動化部屬和建置

甚至Appveyor也有提供Nuget平台提供給開發人員.

使用GitHub帳號登入後,我們透過NEW PROJECT建立一個CI Job.

選擇我們要建立CICD專案.

Read more »

前文

現在CICD越來越普遍,如要提高開發效率和自動化部屬跟Deploy系統有密不可分關係.

今天跟大家分享我開源專案ElectronicInvoice_TW如何利用
Github + Appveyor 來完成自動Deploy Package至Nuget上.

關於Appveyor

Appveyor是一個CI平台,可以透過Github Webhock來觸發一列動作來完成自動化部屬和建置

甚至Appveyor也有提供Nuget平台提供給開發人員.

使用GitHub帳號登入後,我們透過NEW PROJECT建立一個CI Job.

選擇我們要建立CICD專案.

Read more »

Agenda

前文

本篇會分享在撰寫SQL時建議和比較分享

永遠先考慮T-SQL改寫

  1. 符合SARG Statement進行撰寫
    • <、>、=、<=、>=、LIKE(視%所在位置,前面有%讓DB engine選擇不走INDEX)
  2. 不要在Where欄位做運算
  3. 使用ANSI 92相容的Join方式連接資料庫(避免使用舊式Join)
  4. 避免row by row操作

符合SARG格式的撰寫 + 適當Index設計可以解決大部分的效能問題

使用Like查詢建議

  • 盡量別把%放在前面
  • 如果查詢條件是CNAME LIKE '%范'想讓讓查詢走索引(seek 查詢),在後面加一個條件AND CNAME > ''讓查詢走Seek.
1
2
3
4
5
SELECT [MID]
,[NickName]
,[CName]
FROM [Member_Basic] WITH (NOLOCK)
WHERE CNAME LIKE '%范' AND CNAME > ''
Read more »

前文

本篇會跟大家對於SQL-Server資料表深入淺出的介紹.

關於子頁層

資料會存在子頁層中(page),一個Page大小為 8K/Page => 8092(8060 bytes)

每個Page除了存取資料還會存放一些MetaData,我們可以先當作是每個Page大小是8K

Heap資料表

如果一張資料表沒有Clustered Index就會為Heap資料表,這意味著Heap資料表的資料不會有排序一直把資料新增進資料表中,Heap資料表Insert資料快

適合使用在Log資料表、Event資料表、稽核資料表….一直新增資料但比較少查詢表

IAM(index allocation map)

當Heap資料表要搜尋資料SQL-Server透過IAM(index allocation map)去尋要掃描Page範圍,因為IAM會以範圍存在於檔案中的順序來表示它們,這代表循序的堆積掃描都將依檔案順序進行。

Read more »

Agenda

前文

本篇會分享在撰寫SQL時建議和比較分享

永遠先考慮T-SQL改寫

  1. 符合SARG Statement進行撰寫
    • <、>、=、<=、>=、LIKE(視%所在位置,前面有%讓DB engine選擇不走INDEX)
  2. 不要在Where欄位做運算
  3. 使用ANSI 92相容的Join方式連接資料庫(避免使用舊式Join)
  4. 避免row by row操作

符合SARG格式的撰寫 + 適當Index設計可以解決大部分的效能問題

使用Like查詢建議

  • 盡量別把%放在前面
  • 如果查詢條件是CNAME LIKE '%范'想讓讓查詢走索引(seek 查詢),在後面加一個條件AND CNAME > ''讓查詢走Seek.
1
2
3
4
5
SELECT [MID]
,[NickName]
,[CName]
FROM [Member_Basic] WITH (NOLOCK)
WHERE CNAME LIKE '%范' AND CNAME > ''
Read more »

前文

本篇會跟大家對於SQL-Server資料表深入淺出的介紹.

關於子頁層

資料會存在子頁層中(page),一個Page大小為 8K/Page => 8092(8060 bytes)

每個Page除了存取資料還會存放一些MetaData,我們可以先當作是每個Page大小是8K

Heap資料表

如果一張資料表沒有Clustered Index就會為Heap資料表,這意味著Heap資料表的資料不會有排序一直把資料新增進資料表中,Heap資料表Insert資料快

適合使用在Log資料表、Event資料表、稽核資料表….一直新增資料但比較少查詢表

IAM(index allocation map)

當Heap資料表要搜尋資料SQL-Server透過IAM(index allocation map)去尋要掃描Page範圍,因為IAM會以範圍存在於檔案中的順序來表示它們,這代表循序的堆積掃描都將依檔案順序進行。

Read more »

Agenda

前文

本系列文章

兩種基本索引

  • Clustered Index(叢集索引)
  • NonClustered Index(非叢集索引)

兩種Lookup(如果NonClustered Index無法滿足查詢結果執行)

  • RID Lookup
  • Key Lookup

本篇會介紹其他種類Index

Read more »

Agenda

前文

本系列文章

兩種基本索引

  • Clustered Index(叢集索引)
  • NonClustered Index(非叢集索引)

兩種Lookup(如果NonClustered Index無法滿足查詢結果執行)

  • RID Lookup
  • Key Lookup

本篇會介紹其他種類Index

Read more »