MySql - 从18446744073709551615记录中选择一条记录

时间:2014-06-25 03:03:20

标签: mysql

我的问题很简单:假设我假设在一张表中有18446744073709551615条记录(最大数字),但我想从这些记录中选择只有这样的一条:

SELECT * FROM TABLE1 WHERE ID = 5

1.-结果会如此缓慢地出现?

或者如果我有另一个只有五个记录的表,我会做同样的查询

SELECT * FROM TABLE2 WHERE ID = 5

2.-结果会以与第一个选择相同的速度显示,还是会在另一个选择中快得多?

感谢。

2 个答案:

答案 0 :(得分:4)

为简单起见,我们假设ID列是固定宽度的主键。它将在大约64个索引查找中找到(Wolfram Alpha on that)。由于MySQL / InnoDB使用BTrees,因此它将略低于磁盘搜索。

在百万分之一的搜索中,您将进行粗略的索引查找。寻找5个值将需要3 index lookups,整个页面可能适合一个块。

大多数速度差异将来自从磁盘读取的数据。索引分支应该是一个相对较快的操作,并且在功能上,一旦值被缓存在RAM中,您就不会注意到差异。也就是说,当你第一次从你的2 64 行中选择时,它会从旋转磁盘中读取一点点,但对于5和2 64 <如果您要重复查询(甚至忽略查询缓存),请使用/ sup>行。

答案 1 :(得分:3)

如果您在ID列上有索引,那么第一个几乎肯定会比第二个慢,但可能不会 慢得多。

使用索引,您可以有效地找到满足条件的第一条记录,然后所有其他记录将在附近(无论如何,在索引结构中,不一定是数据区域)。

我说在你耗尽数据库处理能力之前你更有可能用第一个磁盘存储用完: - )

相关问题