阿里一面:SQL 优化有哪些技巧?

大家好,我是 Tom哥

MySQL 相信大家一定都不陌生,但是不陌生不一定会用!

会用不一定能用好!

今天,Tom哥就带大家复习一个高频面试考点,SQL 优化有哪些技巧?

当然这个还是非常有实用价值的,工作中你也一定用的上。如果应用得当,升职加薪,指日可待。

1、创建索引

一定要记得创建索引,创建索引,创建索引

重要的事说三遍!

执行没有索引的 SQL 语句,肯定要走全表扫描,慢是肯定的。

这种查询毫无疑问是一个慢 SQL 查询。

那么问题来了,是不是要收集所有的 where 查询条件,然后针对所有的组合都创建索引呢?

答案肯定是否定的。

MySQL 为了提升数据查询速率,采用 B 树结构,通过空间换时间 设计思想。另外每次对表数据做更新操作时,都要调整对应的 索引树
,执行效率肯定会受影响。

本着二八原则,互联网请求读多写少的特点,我们一定要找到一个平衡点。

阿里巴巴的开发者手册建议,单表索引数量控制在5个以内,组合索引字段数不允许超过5个。

其他建议:禁止给表中的每一列都建立单独的索引每个Innodb表必须有个主键要注意组合索引的字段的顺序优先考虑覆盖索引避免使用外键约束

2、避免索引失效

不要以为有了索引,就万事大吉。

殊不知,索引失效 也是慢查询的主要原因之一。

常见的索引失效的场景有哪些?以 % 开头的 LIKE 查询。创建了组合索引,但查询条件不满足 最左匹配原则。如:创建索引 。idx_type_status_uid(type,status,uid),但是使用 status 和 uid 作为查询条件。查询条件中使用 or,且 or 的前后条件中有一个列没有索引,涉及的索引都不会被使用到。在索引列上的操作,函数 upper()等,or、!= (

THE END
Copyright © 2024 亿华云