开发者社区> 优惠券活动> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Mysql SQL优化方法

简介: Mysql SQL优化方法 1.单库表别太多,一般保持在200以下为宜. 2.尽量避免SQL中出现运算,例如select a+5 from A,让DB功能单一化 3.表设计尽量小而精,能用5个字段就不要用6个(除非业务上使用增加冗余字段来提升性能)。
+关注继续查看

Mysql SQL优化方法

1.单库表别太多,一般保持在200以下为宜.

2.尽量避免SQL中出现运算,例如select a+5 from A,让DB功能单一化

3.表设计尽量小而精,能用5个字段就不要用6个(除非业务上使用增加冗余字段来提升性能)。

4.SQL事务不能设计太大,比如一次性提交10W条insert,当然这个不仅仅是性能问题了,可能直接内存溢出了。

一般来说insert事务的话,5K-1W来做批处理就可以了(字段不能太大)

5.设计表的时候尽量用”小数据类型”,比如尽量避免textblob等这些大家伙,优先使用ENUM和SET(小而美,范围有限,百益无一害)

6.设计表字段能用数字类型就千万别用字符类型,比如存IP地址,用int,别用varchar(方法自己百度一下吧)。

7.尽量避免null字段,定义时尽量使用 not null。原因是允许null时不方便查询优化,复合索引也会失效,而且如果列有索引时会额外占用空间: a int(10) NOT NULL DEFAULT 0

8.图片等大家伙不要存DB,用FastDFS等中间件或者直接使用七牛等云存储。

9.大SQL尽量拆分,多核CPU每个CPU只能执行一个SQL,所以并发时,一堆小的可能效率更高一些,并且容易命中缓存,而且不容易长时间锁表(无论什么锁都是时间越短越好),当然这个要结合实际情况分析了,一大堆小的万一增加IO负担呢。

10.事务尽可能的小,代码别偷懒,全加到一个transaction中,尽量使用多个transaction

11.存储过程,触发器之类的能避就全避免了吧,维护不方便,人员变动时,很多时候就忘了,时间一长全是定时炸弹。

12.禁止select *需要啥就取啥。

13.update时,where语句尽量要走索引,不然会全表扫描,一般情况下,1G的数据至少10S(想想这可是update啊,锁住10S意味着啥)。

14.or尽量不用,改为in(),当然in的范围太多也不行,尽量别超100。

15.还是or,如果:select a from A where b=1 or c=1这种where里面不同字段进行or,这种尽量改为union

select a from A where b=1
union
select a from A where c=1
  • 1
  • 2
  • 3

16.避免 “% 前缀”模糊查询 。因为会导致索引失效,大数据量下是灾难。

17.分页时:Select a from A limit 10000,10;这种大偏移量下效率非常低。可以考虑如下几个方案:

select a from A WHERE id>=xxxx limit 11;
(将上一页的最大值通过where id> 进行预处理,然后分页)
  • 1
  • 2
select a from A WHERE id >= ( select a from A limit 10000,1 ) limit 10;
  • 1
select a from A inner join (select a from A limit 10000,10) using (id) ;
  • 1

18.避免使用count(*),不知道为什么mysql优化这么个东西有那么难么,但是实际上大数量下这个东西真心慢,1000W以上至少几秒,作为替代方案,考虑使用nosql例如redismemcached存下来,但是要定时校对。

还有一个办法,直接做一个表存下来,每次增加或者减少都在这个表做update增减。

19.UNION ALL而非 UNION ,看需要啦,一般不用去重的业务的话去重压力不小,能省则省。

20.尽量不用 INSERT SELECT,数据量大有延迟,同步完了可能有错误。

原文地址 https://blog.csdn.net/jeikerxiao/article/details/81744271

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
sqlServer存储过程
1、创建存储过程报错:     'CREATE/ALTER PROCEDURE' 必须是查询批次中的第一个语句。 解决方法: use databaseName 后面要加上一句: GO ...
825 0
SQL Server基础之<存储过程>
原文:SQL Server基础之   简单来说,存储过程就是一条或者多条sql语句的集合,可视为批处理文件,但是其作用不仅限于批处理。本篇主要介绍变量的使用,存储过程和存储函数的创建,调用,查看,修改以及删除操作。
1476 0
SQLSERVER存储过程语法详解
SQL SERVER存储过程语法: Create PROC [ EDURE ] procedure_name [ ; number ]     [ { @parameter data_type }         [ VARYING ] [ = default ] [ OUTPUT ]     ] [ ,...n ]   [ WITH     { RECOMPILE | ENCRY
1659 0
+关注
优惠券活动
阿里云优惠码阿里云推荐券bieryun.com
文章
问答
文章排行榜
最热
最新
相关电子书
更多
MySQL 5.7让优化更轻松
立即下载
MySQL表和索引优化实战
立即下载
MySQL查询优化实战
立即下载