今天有个客户问我一个蛮有意思的问题。我使用的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)