数据库中的记录数量是否会影响选择查询速度?
我的意思是,如果一个数据库有50条记录,而另一个数据库有500万条记录,假设我已经把所有索引放在正确的位置上,那么第二个数据库的查询速度会更慢吗?
数据库中的记录数量是否会影响选择查询速度?
我的意思是,如果一个数据库有50条记录,而另一个数据库有500万条记录,假设我已经把所有索引放在正确的位置上,那么第二个数据库的查询速度会更慢吗?
是的,但惩罚不必太大。
基本上,索引就是一个B树。性能有些与B树中级数相关,因此5个记录的数据库大约有2个级别,500万个记录的数据库有大约22个级别。但它是二进制的,因此1000万行数据库有23个级别,而实际上,索引访问时间通常不是性能调优的问题——通常问题在于没有正确索引的表。
正如odedsh所指出的那样,缓存也是一个重要的因素,小型数据库将被缓存得很好。Sqlite将记录按主键顺序存储,因此选择一个允许常用记录在一起存储的主键可以带来巨大的好处。
是的。
如果表很小,整个数据库也很小,当您从表中选择任何内容时,很可能所有数据已经在内存中,并且可以立即返回结果。
如果表很大但您有一个索引,并且正在对索引列进行简单选择,则可以扫描索引,然后从磁盘读取正确的块并返回结果。
如果没有可用的索引,则数据库将执行完整的表扫描,逐块读取表以查找匹配项。
如果索引列与选择查询列之间存在部分映射,则数据库可以尝试最小化应读取的块数。并且可以认真考虑选择索引结构和类型(BITMAP / REGULAR)
这仅适用于最基本的SQL,它从单个表中选择而不进行任何计算。