如何使mysql的性能优化

优化Sql语句的方法有三种,分别是优化查询过程中的数据访问、优化长且难的Sql语句、优化特定类型的查询语句。

一、优化查询过程中的数据访问

①使用索引覆盖扫描,把所有用到的列都放到索引中,这样存储引擎就不需要获取对应的行就可以返回结果了;

②改变数据库和表的结构;

③修改数据表的范式;

④重写Sql语句,让优化器可以用更优的方式执行查询。

二、优化长且难的Sql语句

①切分查询:将一个大的查询分为多个小的相同的查询。

②分解关联查询:可以将一条关联语句分解成多条Sql语句来执行,让缓存的效率更高,执行单个查询可以减少锁的竞争,在应用层做关联可以更容易对数据库进行拆分,查询效率会大幅提升,减少冗余。

三、优化特定类型的查询语句

①优化count()查询

count(*)中的*会忽略所有的列,直接统计所有的行数,因此不要使用count(列名),使用coutn(*)可以提高查询效率。

在MyISAM中却不同,如果语句中没有任何where条件的时候,count(*)会非常快,但是当有where条件的时候,MyISAM的count统计不一定比其他存储引擎快。这时就可以先使用explain来查询近似值,用近似值来替代count(*),优化查询效率。

②优化关联查询

确定on或者using子句的列上有索引;

确保group by和ordry by中只有一个表中的列,这样MySQL才可能使用索引。关联查询子句的列上有索引查询效率是非常高的。

③优化子查询(嵌套查询)

尽可能使用关联查询来替代子查询。

④优化group by和distinct

这两种查询均可以用索引来优化,是最有效地优化方法;

关联查询中,使用标识列分组的效率会更高;

如果不需要order by进行group by时,可以使用order by null,这样mysql就不会再进行文件排序了,从而提高了查询效率。

⑤优化limit分页

当limit偏移量大的时候,查询效率低。这时可以把上次查询的最大ID记录起来,下次查询的时候直接根据ID来查询就行了。

⑥优化union查询

可以使用union all查询提高查询效率,因为union all的效率高于union。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是小邪邪呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值