网站建设的频道是什么,7一12岁手工,赤坎手机网站建设,海口专门做网站索引
添加索引
where条件的关键自动或者order by后面的排序字段可以添加索引加速查询
索引只能通过删除新增进行修改#xff0c;无法直接修改。
# 查看表的索引
show index from table_name;
show create table table_name;
# 添加索引
alter table table_name add index …索引
添加索引
where条件的关键自动或者order by后面的排序字段可以添加索引加速查询
索引只能通过删除新增进行修改无法直接修改。
# 查看表的索引
show index from table_name;
show create table table_name;
# 添加索引
alter table table_name add index idx_name(name);
create index idx_name on table_name (name);
# 删除索引
alter table table_name drop index idx_name;
drop index idx_name on table_name;索引是否生效
添加的索引并不一定会生效可以通过explain查看SQL的执行计划。
EXPLAIN SELECT * FROM zz_user WHERE user_id 1;索引失效原因
选错索引
SQL优化 远程调用
并行调用
当一个接口中调用的多个远程方法之间没有先后依赖顺序时可以使用并行调用这样整个接口的耗时就会以最长耗时的远程为主。比如要查询一个人的全量信息而这个人的全量信息保存在不同的服务中比如用户服务、积分服务、成长值服务中时可以通过一个关键数据比如用户的id同时去这三个服务中进行查询查询后进行汇总。这样就可以减少接口总耗时。
数据异构
可以通过数据冗余将用户服务、积分服务、成长值服务三个服务中的数据统一放到一个地方比如redis中这样就可以减少远程调用的次数了。
但因为数据被存储在了两个不同的地方数据进行更新时就会因为更新时间问题导致数据的不一致性出现。
重复调用
循环查询数据库
当需要查询一批用户的信息时很大程度上会去遍历用户信息关键字的集合通过对每一个关键字查询一次数据库将查询到的数据进行汇总。这样会因为网络、数据库的连接、验证等操作耗费很多的时间。可以对这批用户集合进行批量查询。只需要远程调用一次就可以查询出所有的数据。批量查询的记录条数要有限制最好控制在500以内。oracle的in关键字最多只能放1000个关键字
死循环
避免因为退出条件的判断出错导致循环无法结束。
无限递归
在进行递归处理时如果一个节点的子节点指向了它的父节点导致形成了一个循环这样就会出现无限递归出现栈溢出。
异步处理
对于一个接口中的非业务操作比如用户操作记录、积分记录等不需要实时处理看到结果的可以进行异步处理减轻系统的压力加快业务操作的响应
线程池
可以使用线程池进行非业务操作的处理但可能会因为操作的异常、服务的异常重启导致操作的丢失造成数据的丢失。
mq
可以将非业务操作放入到mq服务中通过mq的高可用以及幂等重试保证操作的完整性。
避免大事务 少用Transactional注解将查询(select)方法放到事务外事务中避免远程调用事务中避免一次性处理太多数据有些功能可以非事务执行有些功能可以异步处理
锁粒度
synchronized
redis分布式锁
数据库分布式锁
分页处理
当要查询的数据量比较大时可能会因为网路宽度的原因导致查询的出现。查询的数据很多时页面上也无法一次性展示此时可以通过分页减少一次性查询的数据库。也可以在多次查询后将查询后的数据进行汇总。
缓存
redis缓存
二级缓存
分库分表
分库解决数据库连接资源不足问题和磁盘io的性能瓶颈问题
分表解决单表数据量太大SQL语句查询数据时即时走了索引也非常耗时的问题此外也可以解决cpu资源问题。