SQL SERVER 是否會被裝滿,主要是在于數(shù)據(jù)庫的最大容量。包括最大行數(shù)和最大列數(shù) 以及其他。 具體內(nèi)容,我們可以查看下面列表:
SQL Server 數(shù)據(jù)庫引擎對象
最大大小/數(shù)量
每個 GROUP BY、ORDER BY 的字節(jié)數(shù)
8,060
每個索引鍵的字節(jié)數(shù)2
900
每個外鍵的字節(jié)數(shù)
900
每個主鍵的字節(jié)數(shù)
900
每行的字節(jié)數(shù)8
8,060
每個varchar(max)、varbinary(max)、xml、text或image列的字節(jié)數(shù)
2^31-1
每個ntext或nvarchar(max)列的字符數(shù)
2^30-1
每個數(shù)據(jù)表的聚集索引數(shù)
1
GROUP BY、ORDER BY 中的列數(shù)
僅受字節(jié)數(shù)限制
GROUP BY WITH CUBE 或 WITH ROLLUP 語句中的列數(shù)或表達式數(shù)目
10
每個索引鍵的列數(shù)7
16
每個外鍵的列數(shù)
16
每個主鍵的列數(shù)
16
每個非寬表的列數(shù)
1,024
每個寬表的列數(shù)
30,000
每個 SELECT 語句的列數(shù)
4,096
每個 INSERT 語句的列數(shù)
4096
每個客戶端的連接個數(shù)
已配置連接的最大值
數(shù)據(jù)庫大小
524,272 TB
每個 SQL Server 實例的數(shù)據(jù)庫個數(shù)
32,767
每個數(shù)據(jù)庫的文件組個數(shù)
32,767
每個數(shù)據(jù)庫的文件個數(shù)
32,767
文件大小(數(shù)據(jù))
16 TB
文件大。ㄈ罩荆
2 TB
每個表的外鍵表引用數(shù)4
253
標識符長度(以字符計)
128
每臺計算機的實例數(shù)
獨立服務器上為 50 個實例。
故障轉(zhuǎn)移群集上 25 個實例。
包含 SQL 語句的字符串的長度(批大小)1
65,536 * 網(wǎng)絡數(shù)據(jù)包大小
每個連接的鎖數(shù)
每個服務器的最大鎖數(shù)
每個 SQL Server 實例的鎖數(shù)5
僅受內(nèi)存限制
嵌套存儲過程級別數(shù)6
32
嵌套子查詢個數(shù)
32
嵌套觸發(fā)器層數(shù)
32
每個數(shù)據(jù)表的非聚集索引個數(shù)
999
存在以下任意子句的情況下 GROUP BY 子句中的非重復表達式數(shù)目:CUBE、ROLLUP、GROUPING SETS、WITH CUBE、WITH ROLLUP
32
GROUP BY 子句中的運算符生成的分組集數(shù)目
4,096
每個存儲過程的參數(shù)個數(shù)
2,100
每個用戶定義函數(shù)的參數(shù)個數(shù)(個人理解為就是我們寫的SQL語句)
2,100
每個數(shù)據(jù)表的 REFERENCE 個數(shù)
253
每個數(shù)據(jù)表的行數(shù)
受可用存儲空間限制
每個數(shù)據(jù)庫的表數(shù)3
受數(shù)據(jù)庫中對象數(shù)限制
每個分區(qū)表或索引的分區(qū)數(shù)
1,000
非索引列的統(tǒng)計信息條數(shù)
30,000
每個 SELECT 語句的表個數(shù)
僅受可用資源限制
每個表的觸發(fā)器個數(shù)3
受數(shù)據(jù)庫中對象數(shù)限制
每個 UPDATE 語句(寬表)的列數(shù)
4096
用戶連接
32,767
XML 索引
249
最大行數(shù)
從表中可以看到,每個表的行數(shù)是受可用空間限制。而可用空間對于整個數(shù)據(jù)庫達到,524,272 TB。這是非常大的。不過值得注意的是,對于單個數(shù)據(jù)文件的大小限制是16TB。
自增列
剛才園子里的朋友提到了某種特殊的情況,如果表上的自增列情況呢?
create TABLE test (
id INT IDENTITY (2147483647,1),
name VARCHAR(100)
)
INSERT INTO test (name) VALUES ('Owen')
INSERT INTO test (name) VALUES ('Zeng')
\
果然溢出了。所以說,對于有自增列的表,表上的行數(shù)限制,跟定義的自增列的數(shù)據(jù)類型,起始值,步長都有關(guān)系。
針對這種情況可以使用bigint類型。防止超過行數(shù)限制。
最大列數(shù)
而對于列數(shù),非寬表的最大列數(shù)是1024.對于關(guān)系型數(shù)據(jù)庫這個值也非常大了,很難想象,你的列數(shù)超過這個值。
當然這個1024 只是理論值,和上面的自增列一樣還是有其他條件制約著列數(shù)的限制。請看下面的例子:
CREATE TABLE test(id char(4030),name char(4030),title CHAR(10))
\
我的表才3個列就不讓我創(chuàng)建了,,,這個數(shù)據(jù)庫太無情了,,,,,,
這是為什么呢? 從之前的表上我們可以看到,字節(jié)數(shù)8060.其中包括7字節(jié)的內(nèi)部開銷。
\
所以,列數(shù)限制還和你定義的列的長度有關(guān).
其他
對于其他容量限制就不一一贅述了,后續(xù)如果有遇到的時候再補充。
引用
補充:今天就遇到了自己寫的SQL語句查詢的時候,發(fā)現(xiàn)參數(shù)傳入超過了2100個,語句就報錯了。就查看了上面的文章,原來SQLSERVER對參數(shù)有限制,即:
每個用戶定義函數(shù)的參數(shù)個數(shù)(個人理解為就是我們寫的SQL語句)
2,100
解決方法為:分為多次查詢,每次查詢2000個,最后將多次查詢的結(jié)果匯總。