为了举例:
假设我的数据库有1个表,其中的字段是
id,first_name(VARCHAR 100 chars),last_name(VARCHAR 100 chars),about(VARCHAR 10,000 chars)
现在假设数据库是100 Gigs大。
在只有4 Gigs RAM的机器上,随机访问会如何?
每次查询时,查询是否会占用恒定时间?
答案 0 :(得分:1)
如果搜索名字并且未编入索引,则服务器将读取表中的每一行并将其与where子句进行比较。由于检索结果所花费的时间取决于行的位置,因此该查询可能会在时间上发生巨大变化。例如,名字' a'将很快找到和名字' z'需要更长的时间。基本上,您正在对数据库进行线性/顺序访问。
如果名字上有索引,MySQL会在列上构建一个树。树木在搜索时非常有效。基本上找到价值观' a'和' z'因为您正在进行二进制搜索,所以应该执行相同数量的操作。请注意,我说的是操作。
现在有一种方式可以保证查询将始终在相同的时间内执行。请记住,当数据库是内存密集型时,大多数人忽略了数据库真正绑定到磁盘io的事实。这些因素使得你很可能无法保证执行时间总是可以预测和不变的。但是,您可以确保所使用的操作数保持优化。
当索引加速读取时,另外一件事就是减慢写入速度。索引是一把双刃剑。只索引你真正需要的东西。