SQL SERVER 是否會被裝滿,主要是在于數據庫的最大容量。包括最大行數和最大列數 以及其他。 具體內容,我們可以查看下面列表:
SQL Server 數據庫引擎對象
最大大小/數量
每個 GROUP BY、ORDER BY 的字節(jié)數
8,060
每個索引鍵的字節(jié)數2
900
每個外鍵的字節(jié)數
900
每個主鍵的字節(jié)數
900
每行的字節(jié)數8
8,060
每個varchar(max)、varbinary(max)、xml、text或image列的字節(jié)數
2^31-1
每個ntext或nvarchar(max)列的字符數
2^30-1
每個數據表的聚集索引數
1
GROUP BY、ORDER BY 中的列數
僅受字節(jié)數限制
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
嵌套觸發(fā)器層數
32
每個數據表的非聚集索引個數
999
存在以下任意子句的情況下 GROUP BY 子句中的非重復表達式數目:CUBE、ROLLUP、GROUPING SETS、WITH CUBE、WITH ROLLUP
32
GROUP BY 子句中的運算符生成的分組集數目
4,096
每個存儲過程的參數個數
2,100
每個用戶定義函數的參數個數(個人理解為就是我們寫的SQL語句)
2,100
每個數據表的 REFERENCE 個數
253
每個數據表的行數
受可用存儲空間限制
每個數據庫的表數3
受數據庫中對象數限制
每個分區(qū)表或索引的分區(qū)數
1,000
非索引列的統(tǒng)計信息條數
30,000
每個 SELECT 語句的表個數
僅受可用資源限制
每個表的觸發(fā)器個數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個列就不讓我創(chuàng)建了,,,這個數據庫太無情了,,,,,,
這是為什么呢? 從之前的表上我們可以看到,字節(jié)數8060.其中包括7字節(jié)的內部開銷。
\
所以,列數限制還和你定義的列的長度有關.
其他
對于其他容量限制就不一一贅述了,后續(xù)如果有遇到的時候再補充。
引用
補充:今天就遇到了自己寫的SQL語句查詢的時候,發(fā)現(xiàn)參數傳入超過了2100個,語句就報錯了。就查看了上面的文章,原來SQLSERVER對參數有限制,即:
每個用戶定義函數的參數個數(個人理解為就是我們寫的SQL語句)
2,100
解決方法為:分為多次查詢,每次查詢2000個,最后將多次查詢的結果匯總。