听·时光

# 切实感受到数据库索引的作用

开发 Tags: mysql 阅读: 599

近日某一项目,搭建完基本框架后,把旧版网站的数据(Access)全部迁移到了新版网站MySQL,总共约3万多条记录。这时发现加载首页出奇的慢。用谷歌浏览器分析发现是Waiting (TTFB)的时间过长,平均为16s。加载首页需要约17s的时间。

分析发现,这应该是查询数据库太慢了导致。于是优化了一下SQL语句,把联合查询替换掉了。这是发现,加载首页的时间约为7s左右,Waiting (TTFB)的时间有明显减少,变为6s左右,但是还是远远不能满足要求,不可能让用户打开一个首页等待6s-7s。

后面直接测试查询数据表中的一条记录(用模型中一样的sql语句),发现时间居然为0.14s。这个时间也太长了,基本确定问题了:就是从MySQL中查询时间过长。再次分析发现查询主要是根据其中某一个字段,于是给这个字段添加上索引,再次用同样的sql语句进行查询,发现时间将为0.0017s。再次加载首页,发现Waiting (TTFB)的时间将为了约1.5s左右,加载首页的时间也变为2s左右。
一开始没有加上索引,首页加载时间为17s,添加后,为2s。由此可见,索引确实可以大大减少了查询的时间。

那么数据库索引为何可以有这么神奇的效果呢?
发现了几篇分析得不错的文章,但是还没有完全消化,只有几点感受:第一,添加索引后数据已经排序而且是读取内存,这比直接查找读取磁盘要快;第二,添加索引后从算法角度来讲,是从顺序查找的复杂度将为了二分查找的复杂度,这有大大加快了查询速度。

深入:
1.你知道数据库索引的工作原理吗?
2.B-Tree索引在sqlserver和mysql中的应用
3.MySQL索引原理及慢查询优化
4.MySQL索引背后的数据结构及算法原理

发表评论