MySQL性能优化

xiaoxiao2025-04-13  12

事务隔离级别: 1,read uncommitted 2,read committer 3,repeatable read 4,rerializable

myisam: 1,表锁 2,不支持事务 3,有记录行数 4,不支持外键

innodb: 1,表锁行锁 2支持事务 3,不记录行数 4,支持外键

主键索引primary index: 每个节点都保存:1,索引  2,数据

普通索 secode index : 每个节点都保存:1,索引 2,主键索引的引用

执行顺序:

1,from  2,on (过滤不符合条件的数据) 3,join 4,where 5,group by 6,having  7,select 8,distinct 9,order by  10,执行分页语句

1,如果开启了查询缓存,就不要把now(),rand()等放到sql里 2,explain查看执行计划 3,如果确定只有一条数据时用上limit 1; 4,模糊查询加上前缀索引 5,join 关联查询使用=两边类型相当 避免隐式转换 6,left join 优化, left join ( select * ..) t on  7,避免 select *  8,确保每张表都有主键 9,大文本,二进制不要存到数据库,可以用oss 10,经常查询的字段拆分为一张表,数据堆在一起的磁盘读取效率高 11,join + 分页优化

就比如有聊查群组A的成员,假如群组A有3000个群成员, 很多人都会 select 。。。 from 群用户关系表 inner join 用户表 on    where 群ID=ID order by 入群时间倒序 limit 1000,20

群ID=ID是放在 where 后面

优化:1,群ID=id 放在on 后面 2, SELECT user.id,user.nick_name FROM( SELECT user_id FROM user_group WHERE user_group.group_id=1 ORDER BY gmt_create desc limit 100,20)t,user WHERE t.user_id=user.id

12,有时候减少数据库请求次数也是可以提高性能的, 大sql,复杂sql,有时就要把它拆成小sql,然后用java代码处理逻辑

13,order by 优化: 0,保证索引被利用 1,加大max_lenth_for_sort_data 参数的设置 2,去掉不必要的的返回字段 3,增大sort_buffer_size参数设置;

14,group by 优化 0,保证索引被利用

1,尽量避免全表扫描,首先应考虑在where及order by 涉及的列上建立索引; 2,where 子句不要用!=或<>,会导致放弃使用索引; 3,or where 子句使用or来连接条件会放弃索引,用 union all代替

转载请注明原文地址: https://www.6miu.com/read-5028162.html

最新回复(0)