-1

想想我有两张桌子,每张桌子都有一个索引。

现在我通过索引列加入表

我的问题是,每个表有 100 行还是 100 万行,在时间上有什么不同吗?

4

3 回答 3

2

假设您正在图书馆中搜索您的一本书。图书馆有100本书还是有1亿本书在时间上有什么不同吗?甚至图书馆也按类别和字母顺序很好地组织了这本书。它与众不同。计算机与我们人类没有什么不同,只是它执行某些任务的速度比我们快得多。

假设我们有 100 本书要搜索。使用二进制搜索将需要 log2(100) = 6.64 次操作。100,000,000 本书需要 log2(100,000,000) = 26.57 次操作。

于 2013-09-08T15:47:30.750 回答
1

这取决于几件事

  1. 如果是一对一的话,他们之间的关系是什么,没有太大的区别
  2. 如果是 where=some_key 没问题,你要查询什么(并且关系是一对一的)
  3. 索引,在大表中,您必须使用带键的列来防止在具有 100 行的表中进行全表扫描,如果查询不使用索引,则不会有太大区别

一般来说,如果关系不同于一对一和/或您使用的查询不同于“where=some_key”,则速度会有所不同

于 2013-09-08T15:38:07.760 回答
1

当然是有区别的(这就是为什么你永远不应该使用记录比生产数据库少得多的开发数据库的原因之一,你不想在推送到 Prod 时发现性能问题)。

首先假设您要返回所有记录。如果您有 100 条记录表加入到 100 条记录表中,那么可以返回的最多记录是 10,000 条记录(这将是一个交叉连接),在加入到一百万条记录表中的一百万条记录表中返回的最多记录是 1,000,000,000,000 . 显然,仅通过网络连接返回该数量的记录将花费更长的时间,就像打印一百万页需要比打印 100 页更长的时间一样。

接下来,100 条记录表上的索引可能不会被使用,因为它们都可以轻松放入内存中。但是较大的表可能会使用索引,因此有一个额外的查找步骤(与在大表中不使用索引相比,它极大地加快了查询速度),但更关键的是,它们可能不适用于某些能够使用索引的查询指数。假设您使用此 where 条件“WHERE Field1 LIKE '%test%'”进行搜索。现在无法使用索引,并且必须检查一百万条记录的内容。阅读一百万页所花费的时间是否比它花费的时间长读取 100 条记录?数据库读取一百万条记录也需要更长的时间。

于 2013-09-08T18:41:29.117 回答