SQL Server是一個面向行的數據庫。這與列式數據庫相反。這意味着在SQL Server中,給定行的所有數據都一起存儲在磁盤上。舉個例子:
假設你有一個包含3列,FirstName,MiddleInitial和LastName的Customer表。然後,假設您在此表中有3條記錄,分別是Jabba T. Hutt,Dennis T. Menace和George W. Bush。
在一排導向數據庫(如SQL Server),記錄將被存儲在磁盤上,例如:
賈巴,T,赫特;丹尼斯,T,威脅;喬治,W,布什;
相比之下,面向列的數據庫將在磁盤上存儲的記錄是這樣的:
賈巴,丹尼斯,喬治; T,T,W;胡特威脅,布什;
其中列被分組在一起而不是行。
現在,當您將行添加到面向行的數據庫(例如SQL Server)中的表中時,每列的新數據必須與現有行一起插入,從而需要大量行的讀/寫操作。因此,如果要爲客戶前綴插入一個默認爲'Mr'的新列,您將得到以下結果:
Mr,Jabba,T,Hutt;丹尼斯先生,威納斯先生;喬治先生,布什先生,
正如你所看到的,所有的原始數據已經被轉移到右邊。另一方面,當插入默認爲NULL的新列時,不必將新數據放入現有行中。因此,移動較少,需要較少的磁盤讀/寫操作。
當然,這是對磁盤上實際進行的過分簡化。處理索引,頁面等時還需要考慮其他事情,但它應該可以幫助您獲得圖片。
澄清我根本不建議你轉到列式數據庫,我只是把那些信息放在那裏,以幫助解釋面向行的含義。
「爲了儘可能縮小行寬,此表中的所有列都被定義爲非空」 - 這是如何工作的? – 2009-04-16 15:17:58