例如:
假设我的数据库有 1 个字段所在的表
id、first_name(VARCHAR 100 个字符)、last_name(VARCHAR 100 个字符)、about(VARCHAR 10,000 个字符)
现在假设数据库有 100 Gigs 大。
在只有 4 Gigs 内存的机器上随机访问会是什么样子?
每次查询都会花费恒定的时间吗?
例如:
假设我的数据库有 1 个字段所在的表
id、first_name(VARCHAR 100 个字符)、last_name(VARCHAR 100 个字符)、about(VARCHAR 10,000 个字符)
现在假设数据库有 100 Gigs 大。
在只有 4 Gigs 内存的机器上随机访问会是什么样子?
每次查询都会花费恒定的时间吗?
如果您搜索名字并且它没有被索引,服务器将读取表中的每一行并将其与 where 子句进行比较。由于检索结果所需的时间取决于行的位置,因此该查询可能会在时间上发生巨大变化。例如,名字“a”将很快找到,而名字“z”将花费更长的时间。本质上,您正在对数据库进行线性/顺序访问。
如果名字上有索引 MySQL 在列上构建一个树。在搜索中使用树时效率很高。基本上查找值 'a' 和 'z' 应该采取相同数量的操作,因为您正在进行二进制搜索。请注意,我说的是操作。
现在有一种方法可以保证查询将始终在相同的时间内执行。请记住,虽然数据库是内存密集型的,但大多数人忽略了数据库确实绑定到磁盘 io 的事实。这些因素使您很难保证执行时间始终是可预测的和恒定的。但是,您可以确保使用的操作数量保持优化。
只是另一件事,虽然索引加快了读取速度,但它们却减慢了写入速度。所以索引是一把双刃剑。仅索引您真正需要的内容。