mysql的优化

mysql的优化 主要在以下几点
对sql的优化主要是从四个方面优化的,分别是SQL语句以及索引的优化,数据库表结构的优化,系统配置的优化和硬件的优化!
1 SQL语句以及索引的优化:
1.1 SQL语句的优化

a 尽量避免使用子查询;
eg:select * from t1 where id in (select id from t2 where name='zhangsan')
子查询在mysql5.5版本里面,内部执行计划是先查外表,再来匹配里面的表,当外面的表数据量很大的时候,查询就很慢了;
子查询在5.6版本里面,采用了join关联方式对其优化了,会自动将撒了转化为select * from t1 join t2 on t1.id=t2.id;但是需要注意的是,优化只对select有效,对于uodate、delete 的子查询无效,所以生产环境就尽量避免使用子查询。

b 用between看来代替in(查询的条件是连续的才可以使用),用in来代替or,如下
以下语句效率不断增加;
select name from t1 where id=10 or id=20 or id=30;
select name from t1 where id in (10,20,30);

select name from t1 where id=1 or id=2 or id=3;
select name from t1 where id in (1,2,3);
select name from t1 where id between 1 and 3;

c 读取适当的记录 limit m,n,而不要读取过多的记录,如下
select name from t1 where id limit 100,10;
d 避免数据类型不一致
e 分组统计可以进行排序sort,总和查询可以禁止排重用union all
eg:select id,count(*) from group by id;
默认情况下,mysql对所有的group by 列1,列2 。。。。的字段进行排序,如果查询包括group by,想要避免排序的消耗,可以写成如下的拾sql:
select id,count(*) from group by id order by null。
union和union all的差异主要是前者需要将结果集合并后再进行唯一性过滤操作,这就会涉及到排序,增加大量的CPU运算,加大资源消耗及延迟。当然,union all的前提条件是两个结果集没有重复数据。所以一般是我们明确知道不会出现重复数据的时候才建议使用 union all 提高速度。
另外,如果排序字段没有用到索引,就尽量少排序;
f 批量插入数据
insert into t1(id,name) values(1,'a');
insert into t1(id,name) values(2,'b');
insert into t1(id,name) values(3,'c');
----->insert into t1(id,name) values(1,'a'),(2,'b'),(3,'c');

2 索引的优化
join语句的优化和避免索引失效;
3 系统配置的优化;
4 硬件的优化;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值