关于Mysql优化,效率比较高的几点(待续)

关于Mysql优化,效率比较高的几点(待续)

自己的整理的7条优化:
1》区分in和exists、not in和not exists
select * from 表A where id in (select id from 表B)
上面SQL语句相当于::select * from 表A where exists(select * from 表B where 表B.id=表A.id)
in exists (主要是驱动顺序的改变也就是性能变化的关键)
exists外表为驱动表,先被访问,
in 先执行子查询;
in适用外表大内表小;exists适合外表小内表大

2》尽量用union all代替union

3》当只需要一条数据的时候,使用limit 1
使用合理的分页方式以提高分页的效率:select id,name from product limit 866613, 20
优化的方法如下:可以取前一页的最大行数的id,然后根据这个最大的id来限制下一页的起点。
如这个写法:select id,name from product where id> 866612 limit 20

4》not in ;not exists(not exists推荐,效率高)
原SQL语句:
select colname … from A表 where a.id not in (select b.id from B表)
高效的SQL语句:
select colname … from A表 Left join B表 on where a.id = b.id where b.id is null

5》不建议用%前缀模糊查询
例如LIKE“%name”或者LIKE“%name%”会导致索引失效而进行全表扫描,但是可以使用LIKE “name%”。

6》 避免在where子句中对字段进行表达式操作
比如:select user_id,user_project from user_base where age*2=36;
中对字段就行了算术运算,这会造成引擎放弃使用索引,建议改成:
select user_id,user_project from user_base where age=36/2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值