单一表格所能存储的最大记录数有无限制?太多了是否影响查询操作?用什么办法解决?

haoguozhong 2004-03-18 08:51:07
单一表格所能存储的最大记录数有无限制?太多了是否影响查询操作?用什么办法解决?
...全文
126 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2004-03-18
  • 打赏
  • 举报
回复
下表说明在 Microsoft SQL Server 数据库中定义的,或在 Transact-SQL 语句中引用的各种对象的最大值(数量或大小)。下表不包含 Microsoft® SQL Server 2000™ Windows® CE 版。

最大值(数量或大小)
对象 SQL Server 7.0 SQL Server 2000
批处理大小 65,536 * 网络数据包大小1 65,536 * 网络数据包大小1
每个短字符串列的字节数 8,000 8,000
每个 text、ntext、或 image 列的字节数 2 GB-2 2 GB-2
每个 GROUP BY、ORDER BY的字节数 8,060
每个索引中的字节数 900 9002
每个外键的字节数 900 900
每个主键的字节数 900 900
每行字节数 8,060 8,060
存储过程源文本中的字节数 批处理大小之较小者或者 250 MB 批处理大小之较小者或者 250 MB
每个数据表的聚集索引数 1 1
GROUP BY、ORDER BY 中的列数 只受字节数限制
GROUP BY WITH CUBE 或 WITH ROLLUP 语句中的列数或表达式数目 10
每个索引的列数 16 16
每个外键的列数 16 16
每个主键的列数 16 16
每个基础数据表的列数 1,024 1,024
每个SELECT 语句的列数 4,096 4,096
每个INSERT 语句的列数 1,024 1,024
每个客户端的连接个数 已配置连接的最大值 已配置连接的最大值
数据库大小 1,048,516 TB3 1,048,516 TB3
每个 SQL Server 实例的数据库个数 32,767 32,767
每个数据库的文件组个数 256 256
每个数据库的文件个数 32,767 32,767
文件大小(数据) 32 TB 32 TB
文件大小(日志) 4 TB 32 TB
每个数据表的外键表引用 253 253
标识符长度(以字符计) 128 128
每台计算机的实例数 暂缺 16
包含 SQL 语句的字符串长度(批处理大小) 65,536 * 网络数据包大小1 65,536 * 网络数据包大小1
每个连接的锁数 每个服务器的最大锁数 每个服务器的最大锁数
每个 SQL Server 实例的锁数 2,147,483,647(静态)
SQL Server 40% 的内存(动态) 2,147,483,647(静态)
SQL Server 40% 的内存(动态)
嵌套存储过程层数 32 32
嵌套子查询 32 32
嵌套触发器层数 32 32
每个数据表的非聚集索引个数 249 249
SQL Server 实例中同时打开的对象个数4 2,147,483,647(或可用内存) 2,147,483,647(或可用内存)
每个数据库中的对象个数 2,147,483,6474 2,147,483,6474
每个存储过程的参数个数 1,024 1,024
每个数据表的 REFERENCE 个数 253 253
每个数据表的行数 受可用存储资源限制 受可用存储资源限制
每个数据库的数据表个数 受数据库中的对象个数限制4 受数据库中的对象个数限制4
每个 SELECT 语句的数据表个数 256 256
每个数据表的触发器个数 受数据库中的对象个数限制4 受数据库中的对象个数限制4
每个数据表的 UNIQUE 索引个数或约束个数 249个非聚集索引和 1 个聚集索引 249个非聚集索引和 1 个聚集索引


1 网络数据包大小是表格格式数据方案 (TDS) 数据包的大小,该数据包用于应用程序和关系数据库引擎之间的通讯。默认的数据包大小为 4 KB,由 network packet size 配置选项控制。
2 在 SQL Server 2000 中,任何键的最大字节数不能超过 900。可以使用可变长度的列来定义键,只要在这种列中不插入数据超过 900 字节的行,其最大大小就可以在 900 以上。有关更多信息,请参见索引键的最大值。
3 当使用 SQL Server 2000 Desktop Engine 或 Microsoft 数据引擎 (MSDE) 1.0 时,数据库的大小不能超过 2 GB。
4数据库对象包括所有的表、视图、存储过程、扩展存储过程、触发器、规则、默认值及约束。一个数据库中所有对象的总数不得超过 2,147,483,647。

zjcxc 元老 2004-03-18
  • 打赏
  • 举报
回复
没有限制,只受数据文件大小的限制.
progress99 2004-03-18
  • 打赏
  • 举报
回复
创建索引
确定了索引设计后,便可以在数据库的表上创建索引。

Microsoft® SQL Server™ 2000 自动创建唯一索引,以强制实施 PRIMARY KEY 和 UNIQUE 约束的唯一性要求。除非表中已存在聚集索引,或者显式指定了非聚集索引,否则将会创建一个唯一的聚集索引,以实施 PRIMARY KEY 约束。除非显式指定了聚集索引,否则,默认情况下创建唯一的非聚集索引以强制 UNIQUE 约束。

如果需要创建不依赖于约束的索引,可以使用 CREATE INDEX 语句。默认情况下,如果未指定聚集选项,将创建非聚集索引。

创建索引时须考虑的其它事项包括:

只有表的所有者可以在同一个表中创建索引。


每个表中只能创建一个聚集索引。


每个表可以创建的非聚集索引最多为 249 个(包括 PRIMARY KEY 或 UNIQUE 约束创建的任何索引)。


包含索引的所有长度固定列的最大大小为 900 字节。例如,不可以在定义为 char(300)、char(300) 和 char (301) 的三个列上创建单个索引,因为总宽度超过了 900 字节。


包含同一索引的列的最大数目为 16。
在使用 CREATE INDEX 语句创建索引时,必须指定索引、表以及索引所应用的列的名称。作为 PRIMARY KEY 或 UNIQUE 约束的一部分或使用 SQL Server 企业管理器创建的新索引,会根据数据库表的名称,自动获得系统定义的名称。如果在一个表上创建多个索引,这些索引的名称被追加 _1、_2 等。必要时可对索引重新命名。



说明 当前数据库正在备份时不能在其上创建索引。


如果在具有多个辅助索引的表上创建聚集索引,则必须重建所有辅助索引,使它们包含聚集键值而非行标识符 (RID)。同样,如果在具有多个非聚集索引的表上删除聚集索引,所有非聚集索引将作为 DROP 操作的一部分重建。这在大型表上会花很长时间。

在大型表上生成索引的首选方法是以聚集索引开始,然后生成非聚集索引。除去所有索引时,首先除去非聚集索引,最后除去聚集索引。这样,就无需重建索引。

聚集索引
在创建聚集索引时,将会对表进行复制,对表中的数据进行排序,然后删除原始的表。因此,数据库上必须有足够的空闲空间,以容纳数据复本。

默认情况下,表中的数据在创建索引时排序。但是,如果因聚集索引已经存在,且正在使用同一名称和列重新创建,而数据已经排序,则会重建索引,而不是从头创建该索引,以自动跳过排序操作。重建操作会检查行是否在生成索引时进行了排序。如果有任何行排序不正确,即会取消操作,不创建索引。

唯一索引
创建唯一索引可以确保任何生成重复键值的尝试都会失败。如果创建的单个查询导致添加了重复的和非重复的键值,SQL Server 会拒绝所有的行,包括非重复的键值。例如,如果一个单个的插入语句从表 A 检索了 20 行,然后将它们插入到表 B 中,而这些行中有 10 行包含重复键值,则默认情况下所有 20 行都将被拒绝。不过,在创建该索引时可以指定 IGNORE_DUP_KEY 子句,使得只有重复的键值才被拒绝,而非重复的键值将被添加。在上面的例子中,将只会拒绝 10 个重复的键值,其它 10 个非重复的键值将被添加到表 B 中。

如果有任何重复的键值,便不能创建唯一索引。例如,如果要在 a 列和 b 列上创建唯一的组合索引,而表中有两行的 a 列同为值 1,b 列同为值 2,则无法创建唯一索引。
progress99 2004-03-18
  • 打赏
  • 举报
回复
好像沒有限制,關鍵是你有磁盤空間,記錄多了會影響查詢速度,最好的解決方法是建合理的索引。

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧