已删除用户
发布于 2023-08-12 / 0 阅读 / 0 评论 / 0 点赞

Msyql 优化

Order by 优化

根据排序字段建立合适的索引,多字段排序时,也遵循左前缀法则。

尽量使用覆盖索引

多字段排序时,一个升序一个降序,此时是需要注意联合索引在创建时的规则(ASC/DESC)

如果不可以避免fileSort,大数据量排序时,可以适当增大排序缓冲区的大小 sort_buffer_size(默认256k)

show VARIABLES like 'sort_buffer_size'

Group by 优化

在分组操作时,可以通过索引来提高效率

在分组操作时,索引的使用也是满足最左匹配原则

Limit 优化

在分页中,越往后面查询需要消耗的性能越大。其他记录丢弃。查询排序的代价非常大

一般分页查询时,通过查创建覆盖索引,能够比较好的提高性能。可以通过覆盖索引加子查询形式进行优化

Count 优化

MylSAM 引擎把 一个表的总数存在磁盘中因此 使用count(*)的时候会直接返回这个数,效率很高

InnoDB 引擎使用count(*) 需要把数据一行一行读出来,然后累计计数。如果不是null 累加值就加1否则不加

count(*)

innoDB并不会把全部字段取出来,而是专门做了优化,不取值,服务处直接按行累加

count(id)

innoDB引擎会遍历整张表,把每一行的主键I都取出来返回给服务层,服务层拿到主键 直接安行进行累加。

count(字段名)

没有not null 约束 服务层会判断是否为空,不为null 累加

count(1)

innoDB引擎会遍历整张表 但不取值,服务层对于每一行放一个数字1 进去 然后进行累加

按照效率排序的:count(*) > conut(1) > count(id) > count(字段)

Update 优化

innoDB的行锁是针对索引加的锁,不是针对记录加的锁,并且该索引不能失效,否则就会变成表锁。


评论