MySQL获取索引

时间:2014-02-03 01:23:35

标签: mysql

我正在构建一个数据库,并想知道如何获取行,让我说我做了:

 SELECT * WHERE id = 5;

现在,MySQL是否会通过所有列,直到它遇到id = 5的列,或者它是否假设id = 5并立即提供它?就像apache提供文件一样,首先检查absolut路径?

原因是我正在构建一个将使用实时消息的系统,该系统将需要在同一个表下的很多企业,并提供流畅的用户体验,id就像尽可能快地提供消息。

1 个答案:

答案 0 :(得分:1)

这一切都取决于索引。

将你的桌子视为一个很大的(实际上不是那么大的)字典。如果在id列上正确设置了索引,那么MySQL将搜索此索引,并且查询将更快地执行。

如果id列上没有定义索引,那么MySQL将从第一行到最后一行查找您的值。比方说,如果你在字典中寻找“蛋糕”这个词而忽略了每一个常识,从字母“A”开始并继续,直到3549字后,你落在“蛋糕”这个词上。

幸运的是,索引很容易设置(但是它们的设计可能非常棘手),并且id列始终在MySQL中编入索引。

如果有索引

,MySQL如何搜索

MySQL使用鸿沟的优化版本征服算法,复杂度为o(n.log(n))。这意味着,如果要搜索的项目数量增长为n,则完成请求所需的时间将增长为n.log(n)

分治算法如何运作?

好吧,让我们拿回我们的字典。你在寻找“蛋糕”。所以,你只是在中间打开字典,你会发现你在字母L附近。所以你认为,C < L所以让我们忘记下半场,并专注于上半场。然后,您在上半部分中间打开页面(换句话说,季度)。你发现自己身处F字母。然后你想,C < F所以让我们专注于第一季度。等等...

如果你重复这个操作,当你来到C's时开始查看单词的第二个字母,你会发现它通常需要少于8次迭代找到你的特定词语。

将这个与数千个单词相比较,如果这些单词在字典中完全混淆了,你可能需要查找。

现在,您应该非常了解MySQL(以及一般数据库)中索引的重要性