本文從數據庫設計、開發、DBA管理等四個方面敘述了SQL2005與SQL2000兩個版本間的改進。
一、數據庫設計方面
1、字段類型。
varchar(max)\nvarchar(max)類型的引入大大的提高了編程的效率,可以使用字符串函數對CLOB類型進行操作,這是一個亮點。但是這就引發了對varchar和char效率討論的老問題。到底如何分配varchar的數據,是否會出現大規模的碎片?是否碎片會引發效率問題?這都是需要進一步探討的東西。
varbinary(max)代替image也讓SQL Server的字段類型更加簡潔統一。
XML字段類型更好的解決了XML數據的操作。XQuery確實不錯,但是個人對其沒好感。(CSDN的開發者應該是相當的熟了!)
2、外鍵的級聯更能擴展。
可能大部分的同行在設計OLTP系統的時候都不願意建立外鍵,都是通過程序來控制父子數據的完整性。但是再開發調試階段和OLAP環境中,外鍵是可以建立的。新版本中加入了SET NULL 和 SET DEFAULT 屬性,能夠提供能好的級聯設置。
3、索引附加字段。
這是一個不錯的新特性。雖然索引的附加字段沒有索引鍵值效率高,但是相對映射到數據表中效率還是提高了很多。我做過試驗,在我的實驗環境中會比映射到表中提高30%左右的效率。
4、計算字段的持久化。
原來的計算字段其實和虛擬字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了計算字段的持久化,這就提高了查詢的性能,但是會加重insert和update的負擔。OLTP慎用。OLAP可以大規模使用。
5、分區表。
分區表是個亮點!從分區表也能看出微軟要做大作強SQL Server的信心。資料很多,這裡不詳細說。但是重點了解的是:現在的SQL Server2005的表,都是默認為分區表的。因為它要支持滑動窗口的這個特性。這種特性對歷史數據和實時數據的處理是很有幫助的。
但是需要注意的一點,也是我使用過程中發現的一個問題。在建立function->schema->table後,如果在現有的分區表上建立沒有顯式聲明的聚集索引時,分區表會自動變為非分區表。這一點很讓我納悶。如果你覺得我的非分區索引無法對起子分區。
分區表效率問題肯定是大家關心的問題。在我的試驗中,如果按照分區字段進行的查詢(過濾)效率會高於未分區表的相同語句。但是如果按照非分區字段進行查詢,效率會低於未分區表的相同語句。但是隨著數據量的增大,這種成本差距會逐漸減小,趨於相等。(500萬數量級只相差10%左右)