一.sql优化着手思路
SQL优化,既然是优化,那么首先得要定位问题才能对症下药,开启慢查询日志监控,找出系统中比较慢的SQL。这就减少了筛查范围,然后逐条进行执行计划分析。没建索引的建索引,建了索引的看看索引是不是失效了,然后排查为什么索引失效?这些问题排查完了之后,可能因为表数据量过大,那就要考虑是不是要拆表,进行分表。
常用优化建议:
1. 优化查询的选择、连接和排序操作。 2. 优化查询中使用的索引,包括创建新索引、删除无用索引、调整索引的顺序等。 3. 优化查询中使用的表连接方式,包括内连接、外连接、自连接等。 4. 优化查询中使用的子查询,包括对子查询进行优化、使用连接代替子查询等。 5. 优化查询中使用的聚合函数,包括使用索引进行优化、使用分组连接代替聚合函数等。
二.组合索引的最左前缀原则
组合索引的最左前缀原则指的是,在创建组合索引时,应该将最常用于筛选数据的列放在索引的最左侧,这样可以使索引更有效地帮助查询优化。
例如,如果有一张表中包含三个字段:A、B和C,并且频繁使用A和B这两个字段进行筛选数据,则应该将A和B作为组合索引的最左前缀,而不是C。
这样,在使用组合索引进行查询时,数据库系统就可以使用索引进行快速筛选,而不必扫描整张表。这有助于提高查询的效率。
最左前缀原则对于组合索引的创建非常重要,因为它可以帮助数据库系统更有效地使用索引。如果不遵循最左前缀原则,则组合索引可能会变得无用,甚至阻碍查询的优化。
三.事务和mvcc原理
不同事务同时操作同一条数据产生的问题
1.LBCC,解决数据丢失,基于锁的并发控制,Lock Based Concurrency Control。
使用锁的机制,在当前事务需要对数据修改时,将当前事务加上锁,同一个时间只允许一条事务修改当前数据,其他事务必须等待锁释放之后才可以操作。
2.MVCC 解决数据丢失,多版本的并发控制,Multi-Version Concurrency Control。
使用版本来控制并发情况下的数据问题,在B事务开始修改账户且事务未提交时,当A事务需要读取账户余额时,此时会读取到B事务修改操作之前的账户余额的副本数据,但是如果A事务需要修改账户余额数据就必须要等待B事务提交事务。
MVCC使得数据库读不会对数据加锁,普通的SELECT请求不会加锁,提高了数据库的并发处理能力。 借助MVCC,数据库可以实现READ COMMITTED,REPEATABLE READ等隔离级别,用户可以查看当前数据的前一个或者前几个历史版本,保证了ACID中的I特性(隔离性)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了