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