0

例如:

假设我的数据库有 1 个字段所在的表

id、first_name(VARCHAR 100 个字符)、last_name(VARCHAR 100 个字符)、about(VARCHAR 10,000 个字符)

现在假设数据库有 100 Gigs 大。

在只有 4 Gigs 内存的机器上随机访问会是什么样子?

每次查询都会花费恒定的时间吗?

4

1 回答 1

1

如果您搜索名字并且它没有被索引,服务器将读取表中的每一行并将其与 where 子句进行比较。由于检索结果所需的时间取决于行的位置,因此该查询可能会在时间上发生巨大变化。例如,名字“a”将很快找到,而名字“z”将花费更长的时间。本质上,您正在对数据库进行线性/顺序访问。

如果名字上有索引 MySQL 在列上构建一个树。在搜索中使用树时效率很高。基本上查找值 'a' 和 'z' 应该采取相同数量的操作,因为您正在进行二进制搜索。请注意,我说的是操作。

现在有一种方法可以保证查询将始终在相同的时间内执行。请记住,虽然数据库是内存密集型的,但大多数人忽略了数据库确实绑定到磁盘 io 的事实。这些因素使您很难保证执行时间始终是可预测的和恒定的。但是,您可以确保使用的操作数量保持优化。

只是另一件事,虽然索引加快了读取速度,但它们却减慢了写入速度。所以索引是一把双刃剑。仅索引您真正需要的内容。

于 2012-04-12T05:28:31.583 回答