SQL Server 的 ORDER BY 兩三事

  • 3920
  • 0

SQL 的 ORDER BY 會執行資料的重新排序,然後輸出給上層查詢或輸出給用戶端,開發實務上 ORDER BY 的情況非常常見,就跟呼吸一樣自然,但是 ORDER BY 對一個設計不良的資料庫可以說是一個大災難,因為它排序的對象是結果集,若結果集愈大,ORDER BY 會拖慢效能,但適當的設計可以減少 ORDER BY 對效能的損耗。

...繼續閱讀 »

[Troubleshooting][SQL Server] 解決在 SQL Server 無法使用 OPENROWSET 執行 stored procedure 的問題

這是今天在處理 SQL Server 查詢需求時的一個問題,我在資料庫中有寫了好幾支的 stored procedure,但這次要拿 stored procedure 的結果再做運算,且會和其他 stored procedure 的結果做關聯,因此我查了一下網路,找到一篇 StackOverflow.com 中的討論,說可以使用 OPENROWSET 解決這個問題...

...繼續閱讀 »

[SQL Server] 鎖定使用的藝術 (Part 2) - 隔離層次 (Isolation Level)

鎖定的另一種情況,就是當應用程式使用交易 (Transaction) 時,資料庫引擎會啟用交易處理的機制,在 BEGIN TRANS 至 COMMIT/ROLLBACK 間修改資料,在交易進行的期間資料庫引擎會依照適當的方式來進行交易相關資料的鎖定,而在交易之外的使用者讀取或寫入這些交易資料時,會受到交易鎖定行為的影響,資料庫引擎在交易進行期間除了要保障在交易內的所有資料變更都要符合 ACID 規範外,也要避免在交易外的其他並行存取的可能干擾,所以在資料庫引擎中都會設計一個在交易期間將交易資料與一般並行資料間的區隔機制,以保護交易中的資料以及其他並行作業間的交互動作,這個機制就是隔離層次。

...繼續閱讀 »

[SQL Server] 鎖定使用的藝術 (Part 1) - 鎖定控制類型

只要是寫到資料庫存取程式,而且程式又是多人運作 (這裡的多人是指 100 個人以上同時存取) 的環境時,很難不碰到並行處理 (Concurrency Process) 的問題,並行處理在資料庫系統中是一門很重要的學問,因為它一定會出現在商業運轉的環境,而且問題不只是資料庫,像是執行緒的處理也會遇到這樣的問題,所以在並行環境下資料庫都會有一些行動或處理方式,鎖定 (Lock) 就是其中一種。

...繼續閱讀 »

[SQL Server] 游標使用的藝術

在資料庫的設計中,用戶端程式的存取通常會扮演重要的角色,因為用戶端的數量,使用的存取方式,SQL 指令,交易處理等都會影響到資料庫應用程式的效能。我們一般在想定資料庫發生效能問題時,最有可能的幾個因素是 CPU/Memory 以及 I/O 能力,對應到用戶端的程式處理的話,通常就是 SQL 指令,連線開關以及資料的存取方式,這三種通常會具有資料庫效能的決定力。

...繼續閱讀 »

讓資料保持彈性的設計:Profile 架構

如果可以由資料庫本身去做彈性設計的話,對於物件使用 ORM 以及擴充上會有正面幫助,物件可以不受物件既有資料表欄位的限制,即可由物件自己去決定會多或會少哪些資料,而資料庫依照物件的要求做出反應,即可確保物件的高彈性,又可以簡化資料表的設計。這個方法即為 Profile 架構。

...繼續閱讀 »