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

MySql-从18446744073709551615条记录中选择一条记录,mysql,Mysql,我的问题很简单:假设我在一个表中有18446744073709551615条记录(最大数量),但我只想从这些记录中选择一条这样的记录: SELECT * FROM TABLE1 WHERE ID = 5 1.-结果会这么慢出现吗 或者如果我有另一个只有五条记录的表,并且我执行相同的查询 SELECT * FROM TABLE2 WHERE ID = 5 2.-结果将以与第一次选择相同的速度显示,还是在另一次选择中显示得更快 谢谢。不,第一个几乎肯定会比第二个慢,但可能不会慢很多,只要您在ID

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

SELECT * FROM TABLE1 WHERE ID = 5
1.-结果会这么慢出现吗

或者如果我有另一个只有五条记录的表,并且我执行相同的查询

SELECT * FROM TABLE2 WHERE ID = 5
2.-结果将以与第一次选择相同的速度显示,还是在另一次选择中显示得更快


谢谢。

不,第一个几乎肯定会比第二个慢,但可能不会慢很多,只要您在ID列上有一个索引

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


我想说的是,在数据库处理能力耗尽之前,使用第一个磁盘更有可能耗尽磁盘存储空间:-)

不,第一个磁盘几乎肯定会比第二个磁盘慢,但如果您在ID列上有索引,那么速度可能不会太慢

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


我想说的是,在数据库处理能力耗尽之前,您更有可能使用第一个磁盘来耗尽磁盘存储空间:-)

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

在百万分之一的数据中进行搜索需要大致的索引查找。在5个值中进行搜索需要花费大量的时间,整个页面可能适合一个块


大部分速度差异将来自从磁盘读取的数据。索引分支应该是一个相对快速的操作,并且在功能上,一旦值缓存在RAM中,您就不会注意到差异。也就是说,当您第一次从264行中选择时,从旋转的磁盘中读取会有一点困难,但是如果您要重复查询(甚至忽略查询缓存),则5行和264行的速度基本相同。

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

在百万分之一的数据中进行搜索需要大致的索引查找。在5个值中进行搜索需要花费大量的时间,整个页面可能适合一个块


大部分速度差异将来自从磁盘读取的数据。索引分支应该是一个相对快速的操作,并且在功能上,一旦值缓存在RAM中,您就不会注意到差异。也就是说,当您第一次从264行中选择时,从旋转的磁盘中读取会有一点困难,但如果您重复查询(甚至忽略查询缓存),5行和264行的速度基本相同。

似乎很容易测试。。。你试过了吗?@David:是的,在你的硬盘上加载2**64个值就行了?顺便说一下,我们对Facebook上的所有对象使用64位标识符。“这是一个很大的规模。”我明白了。我不喜欢这种规模。但是,如果一个表足够大,但仍然是可管理的数据库(例如2^32条记录),答案不是很清楚吗?似乎很容易测试。。。你试过了吗?@David:是的,在你的硬盘上加载2**64个值就行了?顺便说一下,我们对Facebook上的所有对象使用64位标识符。“这是一个很大的规模。”我明白了。我不喜欢这种规模。但是,如果一个表足够大但仍然是可管理的数据库(例如2^32条记录),答案不是很清楚吗?