索引是数据库优化的基石。它通过创建高效的数据访问路径,避免了低效的全表扫描,从而极大提升了查询性能。对于大多数性能问题,添加合适的索引应是首选的解决方案。虽然索引并非万能灵药,但在优化时,优先考虑索引策略通常是最高效的方式。

举个例子您就知道了:

       1. 我们先准备一张dotcpp_user表格:

dotcpp_user表格

2. 进行一次查询分析 寻找一名叫 dotcpp_user03 的用户

EXPLAIN SELECT * FROM dotcpp_user WHERE name='dotcpp_user03';

user03再次查询

此时,row=5,我们可以清楚地发现,查询语句扫描了表里面的5条记录。

分析: 当一个表没有建立索引时,数据行在磁盘上的存储可以视为无序的。此时执行查询,数据库必须进行全表扫描(Full Table Scan),即逐行检查所有数据直至找到匹配结果。这种方法的效率与表的数据量成线性反比(O(n))。当表数据量极大且匹配记录极少时,全表扫描的性能会急剧下降,成为最耗时的操作。

3. 让我们为name字段添加索引试试?

 CREATE INDEX index_name ON dotcpp_user(name);

4. 再次搜索dotcpp_user03 使用 EXPLAIN 分析这条查询语句:

user03语句分析

此时我们可以清晰的发现,rows=1,证明我们总共扫描了1条记录。

分析:表明优化器预估仅需扫描一行即可获取结果。相较于未建索引时的全表扫描(5行),数据访问量显著降低,这是查询性能提升的直接原因。同时,possible_keys 与 key 字段均显示为 index_name,证实了查询确已使用了该索引。

结论:在读取操作远多于写入操作、且表数据量较大的场景下,为筛选性高(High Selectivity)的列添加索引,是优化查询性能最有效的手段之一。

点赞(3)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)