SQL优化之十万个为什么

本文讨论了在数据库查询中避免使用SELECT*、子查询、关联查询和in/notin的原因,以及它们如何影响性能。强调了使用exists和notexists代替,以及针对大数据量时的优化策略,如小表驱动大表和使用索引字段。
摘要由CSDN通过智能技术生成

不要使用SELECT * 。为啥select * 会影响性能?

选择所有元素造成查询数据过多,而每次读取数据的过程都是磁盘的IO操作,对磁盘的读写操作负荷增大,对数据库的性能会有影响。使用了select * 查询时不会走索引,所以性能比较弱。

不要使用子查询。什么是子查询?为什么不使用子查询?

子查询就是嵌套查询。
子查询会创建一个临时表,会影响性能。查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。

不使用关联查询。什么是关联查询?为什么不使用关联查询?

join方式连接多个表,本质就是各个表之间数据的循环匹配。MySQL5.5版本之前,MySQL只支持一种表间关联方式,就是嵌套循环(Nested Loop Join)。如果关联表的数据量很大,则 join 关联的执行时间会非常长。在 MySQL5.5以后的版本中,MySQL 通过引入BNLJ算法来优化嵌套执行。
因为本身join的效率就是硬伤,一旦数据量很大效率就很难保证,它是走嵌套查询的。小表驱动大表,且通过索引字段进行关联。如果表记录比较少的话,还是OK的。大的话业务逻辑中可以控制处理。

硬是要用join怎么办?
大小表优化,减少驱动表的数据量

不要使用in和not in。使用exists和not exiexis。为什么不要使用in和not in?

因为这两个都是全表搜索,用不到索引和主键,所以导致搜索缓慢。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值