SQL Server 的 ORDER BY 兩三事

  • 3394
  • 0

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

...繼續閱讀 »

[.NET][Database] 資料庫中的 NULL 值

在資料表結構 (table schema) 中,每個欄位除了基本的欄位名稱、型態、大小等資料外,有一個有趣的欄位很特別,就是是否允許 NULL,NULL 這個東西對程式設計師來說是又愛又恨,有時會被它搞得嫑嫑的,但是它有時卻又是一個有必要的存在。

...繼續閱讀 »

[SQL Database] 讓 SQL Database Migration Wizard 支援繁體中文系統

SQL Database Migration Wizard (之前被稱為 SQL Azure Migration Wizard) 是一個移轉本地資料庫到 SQL Database 雲端資料庫的工具程式,它比 SSMS 的 Script Generation Wizard 和 SSIS Database Import/Export Wizard 等工具要來得好用,而且它可以偵測並適時修補在資料表中沒有 Clustered Index 的問題,讓移轉更順暢。只是一直以來,它總是不支援中文環境...

...繼續閱讀 »

[Windows Azure] 使用 Linked Server 方式連接 Windows Azure SQL Database

本文介紹使用 Linked Server 存取 Azure SQL Database 的作法,但要特別聲明,微軟其實並不建議用這個方法,針對跨資料庫查詢,微軟提供了 Azure SQL Database Elastic Query 的功能,請參閱:https://azure.microsoft.com/zh-tw/documentation/articles/sql-database-elastic-query-overview/,而我也將會找時間編寫這個功能的介紹文章。
...繼續閱讀 »

[SQL Server] SQL Server Data Tools (SSDT)

SQL Server 2012 (Denali) 在 3/6 正式發布 RTM 的版本,依 SQL Server 的發展史來看,這次的改版算是一個大型改版,依 SQL Server 2012 官方網站所公布的功能來看,SQL Server 2012 的新功能確實比 SQL Server 2008 R2 要來的多太多了,而且也多了幾個不同的版本,例如 SQL Server 2012 Parallel Data Warehouse for Developers (SQL Server Developer 的進階版本)。不過本文並不是要說 SQL Server 2012 有什麼新功能,而是搭配 SQL Server 2012 所研發的一個新的工具,專屬開發人員使用的-SQL Server Data Tools (SSDT)...

...繼續閱讀 »

[Windows Azure][IT鐵人賽系列] Day 24 - SQL Azure Internals

筆者之前在多場研討會和課程中講授SQL Azure時,都會強調一件事:『雖然SQL Azure和SQL Server很像,但它們本質上還是不同的』。看起來再怎麼像的東西,也一定有不同的地方,SQL Azure以Windows Azure基礎建設環境為基石建構,同時享有了高可用度與容錯能力,但是它並不是什麼都沒改就能做容錯的,除了基礎建設對網路與虛擬機器資源的支援外,SQL Server本身勢必也要做一些修改,才能符合SQL Azure原始設計上應有的功能。

...繼續閱讀 »

[Windows Azure] SQL Azure Reporting 初體驗

SQL Azure Reporting 和 SQL Azure Data Sync 服務,簡直是難兄難弟,它們兩個都有一個共同的問題:CTP 很久,而且管理介面一開始並不好用也不怎麼開放,所以除了一些先導計畫的講師或專家會先進去用以外,大多數人看到那種介面就不會想用了 ... :) 還好,這次 PASS 大會也同時宣布了 SQL Azure Reporting 和 SQL Azure Data Sync 一樣也進入了 Final CTP 階段,不久後應該就會正式開始提供服務。

...繼續閱讀 »

[Windows Azure] 千呼萬喚始出來的 SQL Azure Data Sync

在稍早 (10/11-14) 舉行的 SQL Server PASS Summit 2011 中,SQL Azure 團隊終於宣布並釋出了接近 RTM 版本的 SQL Azure Data Sync 服務到 Windows Azure 的管理入口內,我們以往在簡介 SQL Azure Data Sync 時都只能用 SQL Azure Labs 那個醜醜的介面,而且很多時候都不能 work,但今天出現在 Windows Azure 管理入口的 Data Sync 介面,真的是耳目一新啊...

...繼續閱讀 »

[Windows Azure] 讓 ASP.NET 的 Membership, Role 以及 Session State 可用於 SQL Azure 資料庫

Membership, Role 以及 Session State 這三樣是 ASP.NET 2.0 以後其後版本中的重要角色,ASP.NET 內建了數個 APIs 以及預設的 Providers,並透過 aspnet_regsql.exe 在 SQL Server 中可以建立必要的資料庫與表格,供 ASP.NET 應用程式使用。但是,在 SQL Azure 中,這個功能突然不能用了...

...繼續閱讀 »

[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 架構。

...繼續閱讀 »