SQL优化方面的经验

简介: 在项目中优化SQL查询执行效率,主要从表设计、索引创建与使用三个维度考虑。表设计包括合理选择数据类型、主键设计等;索引创建关注大表、常用查询条件字段,区分度高的列优先建索引;使用时避免索引失效,利用explain检查执行计划。高级优化可采用读写分离和分库分表策略。

必答内容:
嗯,这个话题就比较大了。 那我们在项目中,优化SQL的查询执行效率,会从多个维度来考虑的。
第一个呢,就是表的设计。
比如数据类型的选择,数值类型到底选择 tinyint、int还是bigint,要根据实际需要选择。字符串类型,到底选择char还是varchar,也需要根据具体业务确定。(char定长字符串,效率高;varchar变长字符串,效率略低)
还需要考虑主键的设计,主键在设计时,尽量考虑递增顺序插入的主键,比如:自增主键 或 雪花算法生成的主键。(这样可以规避页分裂、页合并现象的产生)
第二个呢,就是索引的创建。
针对于数据量较大,且查询比较繁琐的表创建索引。(单表超过10w记录)
针对于经常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立索引。
尽量选择为区分度高的列建立索引,如果该字段是唯一的,建立唯一索引,效率更高。(区分度越高,效率越高)。
在varchar类型的字段上,建议指定索引长度(建立前缀索引),没必要对全字段建立索引,根据实际文本区分度决定索引长度就可以。
尽量建立联合索引,而且在联合索引中将区分度高的字段放在前面,减少单列索引。(查询时,联合索引很多时候可以索引覆盖,避免回表,提高效率)
在满足业务需求的前提下,建立适当的索引,索引不宜过多。(索引过多,会增加维护索引的成本,影响增删改的效率)
第三个呢,就是索引的使用。
编写DQL时,在满足业务需要的情况下,要尽量避免索引失效的情况。 【索引失效的情况,见 3.2】
尽量使用索引覆盖,避免回表查询,提高性能。
那这些情况呢,都可以通过 explain 关键字来查看SQL语句的执行计划。
进阶回答:
那如果从数据库层面来讲,也可以基于读写分离的模式,来降低单台服务库的访问压力,从而提高效率。
当然,如果数据量过大,也可以考虑对目前项目中的数据库进行分库分表处理。

目录
相关文章
|
6月前
|
SQL 存储 数据库
sql优化提速整理
sql优化提速整理
|
7月前
|
缓存 监控 数据库
数据库优化实践
在应对电商平台数据库性能下降问题时,公司通过查询优化、硬件升级、索引调整、锁机制改进、数据库分区、读写分离及引入缓存等措施,显著提升了性能。实时监控和用户反馈显示,查询响应时间缩短,事务处理加快,用户体验和业务扩展能力均得到改善。这强调了数据库性能管理对数字化时代业务的重要性及持续优化的必要性。
|
7月前
|
SQL 关系型数据库 MySQL
一次非常有意思的SQL优化经历:从30248.271s到0.001s
一次非常有意思的SQL优化经历:从30248.271s到0.001s
76 0
|
SQL 存储 运维
sql优化40秒到0.1秒的奥秘
sql优化40秒到0.1秒的奥秘
63 0
|
SQL 缓存 大数据
SQL优化的出发点
SQL优化建议
90 0
|
SQL 缓存 关系型数据库
SQL优化案例
SQL优化案例
|
SQL 消息中间件 JavaScript
SQL优化的魅力!从 30248s 到 0.001s(二)
SQL优化的魅力!从 30248s 到 0.001s(二)
SQL优化的魅力!从 30248s 到 0.001s(二)
|
SQL 存储 JavaScript
SQL优化的魅力!从 30248s 到 0.001s(一)
SQL优化的魅力!从 30248s 到 0.001s(一)
SQL优化的魅力!从 30248s 到 0.001s(一)
|
SQL 关系型数据库 MySQL
案例2:SQL优化 | 学习笔记
简介:快速学习案例2:SQL优化