Java面试题

Java基础

线程状态

Mysql

查询计划

sql优化

可从以下几个方面优化:

  • 减少数据扫描:尽可能利用索引、覆盖索引、联合索引
  • 返回更少数据:尽量不要select *,数据多,增加网络传输压力
  • 减少交互次数:批量Insert
  • 减少服务器cpu和内存开销
  • 深度分页查询优化

合理利用索引

使用联合索引时,尽量满足最左匹配原则。

深度分页优化

查询偏移量过大的场景我们称为深度分页,这会导致查询性能较低

select * from tb_order where user=xxx limit 10000, 10

1)id连续则可以改为范围查询

# 查询指定 ID 范围的数据
SELECT * FROM t_order WHERE id > 100000 AND id <= 100010 ORDER BY id

2)子查询:内层查询使用覆盖索引+外层查询使用主键索引

select * fomr tb_order where id in (select id from tb_order where user=xxx) limit 10000, 10

2)延迟关联:延迟关联的优化思路,跟子查询的优化思路其实是一样的:都是把条件转移到主键索引树,减少回表的次数。不同点是,延迟关联使用了 INNER JOIN(内连接) 包含子查询。使用连接代替in (in查询属于子查询,需要建立临时表)

SELECT o.*
FROM tb_order o
INNER JOIN (
    SELECT id
    FROM tb_order
    WHERE user = 'xxx'
    LIMIT 10000, 10
) AS subquery ON o.id = subquery.id;

[参考]
优化Sql语句,避免查询慢
阿里二面:SQL优化方式有哪些?你做过哪些SQL优化?

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值