数据库优化思路

数据库优化思路有如下几个方面:

1、建立索引

2、分库、分表、分区

3、数据库引擎

     mysql比较常用的数据库引擎是:innodb 、myisam
     myisam查询效率比innodb快1-2倍,
     myisam是表级锁,适用于一次插入多次查询的表,或者是读写分离中读库中的表
     innodb是行级锁,适用于频繁更新,插入,读写分离写库中的表

     详细可参考:https://www.cnblogs.com/0201zcr/p/5296843.html

4、预处理

      实时数据放入缓存中

      历史数据,将复杂sql语句执行出来的结果生成视图,查询的时候直接查询视图,速率显著提高。

5、读写分离

6、增加服务器内存、CPU及网络带宽

 

对于sql语句优化方面,有如下需要注意的地方:

1、对查询进行优化,尽量避免全表扫描,首先考虑在where及order by涉及的列上加索引

2、避免在where子句中对字段进行null值判断,比如select id from where num is null 将会放弃索引进行全表扫描。
解决办法是设置为默认值,比如0。

3、避免在where子句中使用!= 或者<>,否则会放弃索引进行全表扫描

4、避免在where子句中使用or来连接条件,否则会放弃索引进行全表扫描
解决办法使用union all

5、避免在where子句中使用in 或则 not in ,否则会放弃索引进行全表扫描
解决办法使用exists代替in
select num from a where num in (select num from b)
替换为

select num from a where exists (select 1 from b where b.num = a.num)

6、避免全模糊查询,比如select id from a where name like '%abc%',将放弃索引进行全表扫描
解决办法使用右模糊查询,即select id from a where name like 'abc%',如果仍需要全模糊查询可使用locate或者position方法,如下:

     select id from a where locate('abc',name) > 0

     select id from a where position('abc'  in  name)

7、避免隐式转换,比如varchar类型的字段a = 1 ,如此会放弃索引进行全表扫描

8、避免在where子句=的左边进行函数、算数运算或则其他表达式运算,否则将放弃索引进行全表扫描

9、尽量使用数字型字段,若只包含数字信息的字段尽量不要设计成字符串类型

10、使用varchar代替char

11、不要出现select * from a 或者 select count(*) from b 这种无意义的语句

 

参考文章:https://blog.csdn.net/zhoupan301415/article/details/78257783

                 https://blog.csdn.net/jie_liang/article/details/77340905

转载于:https://www.cnblogs.com/conswin/p/9374629.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值