记录数量对性能有影响吗?

3

数据库中的记录数量是否会影响选择查询速度?

我的意思是,如果一个数据库有50条记录,而另一个数据库有500万条记录,假设我已经把所有索引放在正确的位置上,那么第二个数据库的查询速度会更慢吗?

3个回答

8

是的,但惩罚不必太大。

基本上,索引就是一个B树。性能有些与B树中级数相关,因此5个记录的数据库大约有2个级别,500万个记录的数据库有大约22个级别。但它是二进制的,因此1000万行数据库有23个级别,而实际上,索引访问时间通常不是性能调优的问题——通常问题在于没有正确索引的表。

正如odedsh所指出的那样,缓存也是一个重要的因素,小型数据库将被缓存得很好。Sqlite将记录按主键顺序存储,因此选择一个允许常用记录在一起存储的主键可以带来巨大的好处。


2
是的,其他人说的原因也是有道理的。还有其他因素会影响Select语句的速度,比如你从多少列中获取数据。
我曾在一张有150多列的表格中进行了一些速度测试,我只需要获取其中约40列,并且需要所有20,000多条记录。虽然速度差异非常小(我们谈论的是20到40毫秒),但实际上使用“SELECT ALL *”从所有列中获取数据比使用“Select All Field1, Field2等”更快。
我认为,如果你的表中有更多的记录和列,这个例子将给你带来更大的速度差异,但我从未有过在像一张有500万条记录的表中进一步测试它的需求。

1

是的。

如果表很小,整个数据库也很小,当您从表中选择任何内容时,很可能所有数据已经在内存中,并且可以立即返回结果。

如果表很大但您有一个索引,并且正在对索引列进行简单选择,则可以扫描索引,然后从磁盘读取正确的块并返回结果。

如果没有可用的索引,则数据库将执行完整的表扫描,逐块读取表以查找匹配项。

如果索引列与选择查询列之间存在部分映射,则数据库可以尝试最小化应读取的块数。并且可以认真考虑选择索引结构和类型(BITMAP / REGULAR)

这仅适用于最基本的SQL,它从单个表中选择而不进行任何计算。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接