2011-04-11 62 views

回答

8

假设你已经为id字段建立索引并且它是唯一的。
该算法是一个binary search(有优化和改进,但下面是它背后的一般理论)。

比方说你有一个数字的下面有序列表:
1,45,87,111,405,568,620,945,1100,5000,5102,5238,5349,5520

说你要搜索的号码5000,有两种方法。

  1. 扫描整个列表,在这种情况下,您将不得不检查10个数字(从开始计数直到您达到5000)。
  2. 二进制 - >这里是步骤: 2a。转到中间数字(620),因为5000大于那么 - >
    2b。你在数字945-5520上也是这样,中位数是5102因为5000小于那么 - >
    2c。去到部分945-5102的中间值,这是1100,因为它低于5000,去1100-5102之间的部分
    2d。找到了!

这是4对运行10,所以,二进制搜索的复杂性会以同样的速度时二进制搜索数据呈指数级增长

+0

非常感谢您的时间:)这是一个很好的解释:) :) – 2011-04-11 19:04:41

1

索引在MySQL中存储为B-trees,空间数据类型索引使用R-trees,MEMORY表也支持hash indexes

+0

感谢很多在等待这个快速增长的答案作为全扫描! – 2011-04-11 18:47:18

0

您可以使用explainprocedure analyse来了解您的查询是如何由mysql运行的。

如果您想知道它在内部使用什么样的算法来查找结果集。我建议你阅读DBMS如何工作。