假设我有一个表有1000行而另一个表有相同的结构/索引但有1000万条记录。 CRUD操作在较大的表上的性能是否会比较小的表慢?感谢。
答案 0 :(得分:2)
取决于数据库引擎,但通常是的,它会更慢,只是因为你必须通过索引来查找你的数据。如果您进行全局更新,它也会变慢,只是因为您正在更改更多数据。
数据库也经常被调整为快速写入或快速读取 - 在第二种情况下,您必须更新索引,一旦它很大,这需要更多时间。
答案 1 :(得分:1)
这取决于。创建,删除和更新的平均速度会稍微慢一些,因为索引结构更有可能需要重新组织。此外,如果经常从数据库系统请求更多数据,则您尝试访问的数据不太可能在缓存在RAM中并且必须从硬盘读取。但是这些差异对于修改查询不应该非常重要。
获取/阅读肯定会慢一些。显而易见的是,必须对大量数据进行提取,过滤,排序和分组比使用少量数据执行相同操作要慢。如果您正在处理的数据太大而无法放入机器的RAM中,则尤其如此。
答案 2 :(得分:0)
这取决于很多因素,几乎不可能说。示例:数据库引擎将数据存储为具有指向字符串的指针的行。出于某种原因,您的10M行表仅包含四个不同的字符串。所以你有4个字符串的10M指针。
用一个字符串替换另一个字符串的更新实际上只会用一个字符串替换另一个字符串;指针会是一样的。无需更新索引。无论你有多少行,速度都相同。
除非删除只是将字符串标记为“已删除”,否则删除会更慢。稍后运行的清理过程将实际清理表。但是,作为数据库的用户,您将不会注意到:删除会立即返回。
选择会更慢,因为它必须返回更多数据。可以返回第一行的时间将取决于引擎设计和查询。对于具有良好选择的索引的10M表运行的编写良好的查询可能比具有错误索引的1K表更快。这取决于服务器上的RAM量(可能它可以将整个数据库保存在RAM中),磁盘速度(具有大量可以并行工作的磁盘的RAID阵列,而不是具有少量RAM和单个磁盘的慢速PC)。 / p>
插入通常较慢,因为在10M表上会有更多(和更大)的索引,但如果没有索引,则向10M表添加单行通常与添加到小表一样快。
答案 3 :(得分:0)
没有索引(或订单),就页面访问而言,插入,更新和删除应该没有显着差异(不包括定位页面时间,这主要受SQL类型和内存缓存大小等影响)
索引的类型和数量以及您使用的 WILL 的SQL产品会产生明显的影响
在顺序键上只有一个整数索引的10M行表对1000行和10M行执行非常相似,因为每次插入或删除只会更改一个索引页(99.9%的时间用整页索引),和更新将没有索引更改。 10M行的索引页将适合大多数服务器的缓存
但是,与1000行相比,varchar(50)属性的索引可以慢很多倍,但这是大型索引的成本
然而,千万行并不是很担心。如果行长度为100个字节,那么整个表将适合<2GB的RAM如果您担心性能会增加更多内存,那么它比尝试手动优化数据库便宜
答案 4 :(得分:0)
当然,但我不确定这是没有任何背景的非常有用的信息。出于应用程序设计的目的,它通常是您最不关心的问题之一,因为有很多方法可以解决它,并且通常没有很多替代方案具有成本效益。
为什么问?