Mysql SQL优化方法
Mysql SQL优化方法
1.单库表别太多,一般保持在200以下为宜.
2.尽量避免SQL中出现运算,例如select a+5 from A
,让DB功能单一化
3.表设计尽量小而精,能用5个字段就不要用6个(除非业务上使用增加冗余字段来提升性能)。
4.SQL事务不能设计太大,比如一次性提交10W条insert
,当然这个不仅仅是性能问题了,可能直接内存溢出了。
一般来说insert
事务的话,5K-1W来做批处理就可以了(字段不能太大)
5.设计表的时候尽量用”小数据类型”,比如尽量避免text
,blob
等这些大家伙,优先使用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
例如redis
,memcached
存下来,但是要定时校对。
还有一个办法,直接做一个表存下来,每次增加或者减少都在这个表做update
增减。
19.UNION ALL
而非 UNION
,看需要啦,一般不用去重的业务的话去重压力不小,能省则省。
20.尽量不用 INSERT SELECT
,数据量大有延迟,同步完了可能有错误。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
混合云存储跨云灾备方案之跨云容灾
前面两篇文章介绍了基于阿里云备份的跨云备份和云存储网关的跨云复制,两者主要是解决文件粒度的备份与恢复问题。如果用户需要保护一个云上的数据库应用,而不仅仅是数据库的数据文件;如果用户需要保护整个云主机,而不止一些文件和目录;且用户对于保护同样是有实时性要求的。那么,混合云容灾就是为这些用户需求量身打造的拳头产品。 基于混合云容灾的跨云容灾架构 下图描述了从云厂商T的一台Oracle服务器,通过混合云容灾恢复网关,备份到阿里云上的云灾备库中,再恢复(fail-over)到阿里云ECS的过程。混合云容灾恢复网关同时还支持将在云灾备库的最新数据恢复回(fail-back)到云厂商T的Oracle主机中。通过这张架构图,用户可以了解到,容灾的部署在源端和目的端是对称的。需要用户注意的一点是,图中云灾备库是虚线画的。不同于云备份库和OSS,云灾备
- 下一篇
阿里云服务器ECS操作系统的分类
目前阿里云服务器ECS操作系统主要分为windows和Linux两大操作系统:
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,CentOS7官方镜像安装Oracle11G
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池