今天有個客戶問我一個蠻有意思的問題。我使用的SQL SERVER 2008數據庫,目前數據庫130多G,其中某個表的記錄條數就有3億1千多萬,佔用了50多G。那SQL SERVER 數據庫中的表有沒有行數和列數限制呢?會不會忽然有一天,超過這個限制,個人系統就不能使用了? sql
SQL SERVER 是否會被裝滿,主要是在於數據庫的最大容量。包括最大行數和最大列數 以及其餘。 具體內容,咱們能夠查看下面列表:數據庫
SQL Server 數據庫引擎對象服務器 |
最大大小/數量 網絡 |
---|---|
每一個 GROUP BY、ORDER BY 的字節數函數 |
8,060spa |
每一個索引鍵的字節數2日誌 |
900xml |
每一個外鍵的字節數對象 |
900blog |
每一個主鍵的字節數 |
900 |
每行的字節數8 |
8,060 |
每一個 varchar(max)、varbinary(max)、xml、text 或image 列的字節數 |
2^31-1 |
每一個 ntext 或 nvarchar(max) 列的字符數 |
2^30-1 |
每一個數據表的彙集索引數 |
1 |
GROUP BY、ORDER BY 中的列數 |
僅受字節數限制 |
GROUP BY WITH CUBE 或 WITH ROLLUP 語句中的列數或表達式數目 |
10 |
每一個索引鍵的列數7 |
16 |
每一個外鍵的列數 |
16 |
每一個主鍵的列數 |
16 |
每一個非寬表的列數 |
1,024 |
每一個寬表的列數 |
30,000 |
每一個 SELECT 語句的列數 |
4,096 |
每一個 INSERT 語句的列數 |
4096 |
每一個客戶端的鏈接個數 |
已配置鏈接的最大值 |
數據庫大小 |
524,272 TB |
每一個 SQL Server 實例的數據庫個數 |
32,767 |
每一個數據庫的文件組個數 |
32,767 |
每一個數據庫的文件個數 |
32,767 |
文件大小(數據) |
16 TB |
文件大小(日誌) |
2 TB |
每一個表的外鍵表引用數4 |
253 |
標識符長度(以字符計) |
128 |
每臺計算機的實例數 |
獨立服務器上爲 50 個實例。 故障轉移羣集上 25 個實例。 |
包含 SQL 語句的字符串的長度(批大小)1 |
65,536 * 網絡數據包大小 |
每一個鏈接的鎖數 |
每一個服務器的最大鎖數 |
每一個 SQL Server 實例的鎖數5 |
僅受內存限制 |
嵌套存儲過程級別數6 |
32 |
嵌套子查詢個數 |
32 |
嵌套觸發器層數 |
32 |
每一個數據表的非彙集索引個數 |
999 |
存在如下任意子句的狀況下 GROUP BY 子句中的非重複表達式數目:CUBE、ROLLUP、GROUPING SETS、WITH CUBE、WITH ROLLUP |
32 |
GROUP BY 子句中的運算符生成的分組集數目 |
4,096 |
每一個存儲過程的參數個數 |
2,100 |
每一個用戶定義函數的參數個數 |
2,100 |
每一個數據表的 REFERENCE 個數 |
253 |
每一個數據表的行數 |
受可用存儲空間限制 |
每一個數據庫的表數3 |
受數據庫中對象數限制 |
每一個分區表或索引的分區數 |
1,000 |
非索引列的統計信息條數 |
30,000 |
每一個 SELECT 語句的表個數 |
僅受可用資源限制 |
每一個表的觸發器個數3 |
受數據庫中對象數限制 |
每一個 UPDATE 語句(寬表)的列數 |
4096 |
用戶鏈接 |
32,767 |
XML 索引 |
249 |
從表中能夠看到,每一個表的行數是受可用空間限制。而可用空間對於整個數據庫達到,524,272 TB。這是很是大的。不過值得注意的是,對於單個數據文件的大小限制是16TB。
剛纔園子裏的朋友提到了某種特殊的狀況,若是表上的自增列狀況呢?
create TABLE test (
id INT IDENTITY (2147483647,1),
name VARCHAR(100)
)
INSERT INTO test (name) VALUES ('Owen')
INSERT INTO test (name) VALUES ('Zeng')
果真溢出了。因此說,對於有自增列的表,表上的行數限制,跟定義的自增列的數據類型,起始值,步長都有關係。
針對這種狀況可使用bigint類型。防止超過行數限制。
而對於列數,非寬表的最大列數是1024.對於關係型數據庫這個值也很是大了,很難想象,你的列數超過這個值。
固然這個1024 只是理論值,和上面的自增列同樣仍是有其餘條件制約着列數的限制。請看下面的例子:
CREATE TABLE test(id char(4030),name char(4030),title CHAR(10))
個人表才3個列就不讓我建立了,,,這個數據庫太無情了,,,,,,
這是爲何呢? 從以前的表上咱們能夠看到,字節數8060.其中包括7字節的內部開銷。
因此,列數限制還和你定義的列的長度有關.
對於其餘容量限制就不一一贅述了,後續若是有遇到的時候再補充。
官方文檔:https://technet.microsoft.com/zh-cn/library/ms143432(v=sql.100)