这实际上取决于列中的内容。如果有很多大的 VARCHAR 列——并且它们经常被填充到接近容量——那么你可能会遇到一些问题。如果都是整数数据,那么你应该没问题。
453 * 4 = 1812 # columns are 4 byte integers, row size is ~1.8k
453 * 255 = 115,515 # columns are VARCHAR(255), theoretical row size is ~112k
经验法则是行大小不应超过磁盘块大小,一般为 8k。正如您所看到的,如果您的大表完全由 4 字节整数组成,但如果它由 255 个字符的 VARCHAR 列组成,那么您的大表在这方面不是问题,那么您可能会大大超出限制。这个 8k 限制曾经是 SQL Server 中的硬限制,但我认为现在它只是一个软限制和性能指南。
请注意,VARCHAR 列不一定会消耗与您为它们指定的大小相称的内存。这是最大尺寸,但它们只消耗它们需要的量。如果 VARCHAR 列中的实际数据始终为 3-4 个字符长,那么大小将与整数列的大小相似,无论您将它们创建为 VARCHAR(4) 还是 VARCHAR(255)。
一般规则是您希望行大小较小,以便每个磁盘块有很多行,这会减少扫描表所需的磁盘读取次数。一旦超过 8k,每行就有两次读取。
Oracle 有另一个潜在问题,即 ANSI 连接对连接中所有表的列总数有硬性限制。您可以通过避免使用 Oracle ANSI 连接语法来避免这种情况。(有些等价物不受此错误的影响。)我不记得限制是什么或它适用于哪些版本(我认为它尚未修复)。
假设您有足够的硬件,您正在谈论的行数应该没有问题。