Mysql 索引如何使速度加快?

Mysql 索引如何使速度加快?,mysql,sql,performance,indexing,Mysql,Sql,Performance,Indexing,我的问题都在标题里。为什么索引真的能让查询这么快?!我读过一些关于索引以及如何使用索引的文章。但是我仍然不知道当我在列上创建索引时,在后台会发生什么 它会对行进行排序吗?好吧,那么?你知道,当我在两列上创建复合索引时,我的一个查询的速度从4秒降低到了0.04秒 不管怎样,我对理解创建索引时会发生什么很感兴趣?它们对性能有何帮助?让我们看一个有50条记录的表,它没有索引 您可能希望在键入时查询第49条记录 select * from <myTable> where Id='49' 在

我的问题都在标题里。为什么索引真的能让查询这么快?!我读过一些关于索引以及如何使用索引的文章。但是我仍然不知道当我在列上创建索引时,在后台会发生什么

它会对行进行排序吗?好吧,那么?你知道,当我在两列上创建复合索引时,我的一个查询的速度从4秒降低到了0.04秒


不管怎样,我对理解创建索引时会发生什么很感兴趣?它们对性能有何帮助?

让我们看一个有50条记录的表,它没有索引

您可能希望在键入时查询第49条记录

select * from <myTable> where Id='49'
在后台发生的事情是,每一页或每一行都会被迭代,并检查该行的id是否为第49行,一旦它到达第49行,它就会将该行推到屏幕上。但这里需要注意的是,每个迭代行都会首先被拉入内存,然后最终结果会被推到屏幕上

如果在ID列上添加了索引,该怎么办。所发生的事情是创建一个单独的表,其中存储ID值及其相应的行地址。所以现在,当您根据ID进行查询时,它会快速找到该特定ID的行地址,并将其拉入内存,根据您想要的内容,a*或某些列,它会在内存中过滤并在屏幕上按下

这可能对你有帮助


浏览一下See,谷歌是网络上所有页面的索引,在这里提问之前,你应该先使用它。如果你想在电话簿中找到约翰·史密斯的电话号码,而不是按姓名排序,那么你可以使用它。@PaulSpiegel很棒。。如果你加上你的评论作为回答,我会接受你的回答;它混淆了id为49的记录与相同记录在某些顺序中是第49条的截然不同的概念。数据库系统的一个基本功能不是以任何特定顺序存储记录。我理解您的观点@HighPerformanceMark,但在一开始我提到了一个包含50行的表,我只是在这里给出了一个包含这些行的简单示例。。也许下一次我们可以举一个比这个更好的例子