数据库中的记录数是否会影响选择查询的速度?
我的意思是如果一个数据库有50条记录而另一条有500万条记录,那么第二条记录的选择会慢吗?假设我把所有索引放在正确的位置
答案 0 :(得分:3)
是的,但这不一定是一个很大的惩罚。
在最基本的层面上,索引是b树。性能与b树中的级别数量有些相关,因此5个记录数据库大约有2个级别,500万个记录数据库大约有22个级别。但它是二进制的,所以1000万行数据库有23个级别,实际上,索引访问时间通常不是性能调优的问题 - 通常的问题是没有正确索引的表。
如odedsh所述,缓存也是一个很大的贡献者,小型数据库将被很好地缓存。 Sqlite将记录存储在主键序列中,因此选择允许一起使用的记录存储在一起的主键可能是一个很大的好处。
答案 1 :(得分:1)
是
如果表格很小并且从表格中选择任何内容时整个数据库很小,则很可能所有数据都已在内存中,结果可以立即返回。
如果表很大但你有一个索引并且你在索引列上做了一个简单的选择,那么可以扫描索引,然后可以从磁盘读取正确的块并返回结果。
如果没有可以使用的索引,则db将执行全表扫描,逐块读取表以查找匹配项。
如果索引列和select查询列之间存在部分映射,则db可以尝试最小化应读取的块数。在正确选择索引结构和类型(BITMAP / REGULAR)
时可以考虑很多。这仅适用于从单个表中选择而不进行任何计算的最基本的SQL。
答案 2 :(得分:1)
是的,其他人说的原因很重要。
还有其他因素会影响Select语句的速度,例如你从中获取数据的列数。
我曾经在一个包含超过150列的表格中进行了一些速度测试,我只需要抓取大约40个列,而我需要所有20,000多条记录。虽然速度差异非常小(我们说的是20到40毫秒),但实际上从使用“SELECT ALL *”的所有列中获取数据实际上更快,而不是“选择所有Field1,Field2等”
我假设你的表中的记录和列越多,这个例子对你的速度差异就越大,但我从来没有需要在更极端的情况下进一步测试它,例如表中的500万条记录。