mysql的优化

一、mysql的优化思路

二、mysql优化的原则

1)在架构策略上的优化

读写分离

分库分表

缓存

用 NOSQL 的方式使用 MYSQL

2)在数据库安装配置参数的优化

 

3)在表的数据库优化

永远为每张表设置一个ID 

使用 ENUM 而不是 VARCHAR 

从 PROCEDURE ANALYSE() 取得建议 

选择正确的存储引擎。myisam适合一些需要大量查询的应用。但其对于大量写操作并不是很好。因为它使用到的是表级锁,所以在你更新的时候,整张表都会被锁起来,试想一下,当你在更新某一行数据的时候,导致其他的行都无法被访问,这会不会  很难受呢。另外,myisam对于select count(*)这类操作的计算时很快的。而至于innodb而言,对于一些小的应用,它会比myisam还慢。它支持的是行级锁,于是写操作较多的时候,它会更加优秀。它还支持一些更高级的应用,比如说:事务。

为每张表设置一个id作为其主键。这个id最好是一个int类型的,推荐使用unsigned,并将其设置为自动增加auto_increment。之前就出现过一个同事将varchar的字段作为主键的情况, 然后在数据量较大的时候,数据库这个环节速度变得不是很友好,所以尽量不要使用varchar来当主键,它会使得性能出现下降。而且在某些情况下,id这个主键字段是非常重要的。

使用enum而不是varchar。实际上,enum保存的是tinyint类型,但其显示为字符串。用这个字段来作一些选项列表就变得很合适了。比如你有一个字段,比如“性别”、“状态”或“所属部门”等,你知道这些字段的值是固定且有限的,那么可以考虑使用enum。对于性别这个字段,一般分为两种,有可能还有保密这种情况,我们可以使用数字1、2、3来分别表示这三张情况,而对于这些数字含义的区分则是业务层的事情了。我们需要将一些繁琐的需要计算的步骤全部放到业务层(或者说是服务层),因为系统的瓶颈在数据库,我们不能将过多的计算过程压到数据库上面去。数据库存储的数据应该尽量简单,但是,我们会在业务层结合具体的业务,对这些简单的数据进行分析。

 

拆为搜索的字段建立索引。不要以为只有标的逐渐可以建立索引,如果某个字段你总要拿来做搜索,那么为它简历索引吧。但是,不要以为建立索引,就可以为所欲为。其中有一些常用的规则需要去遵循以下的。详情请见这篇博客:建立索引常用的规则

4)在sql上的优化

尽可能的使用 NOT NULL 

当只需要一条数据时使用LIMIT 1.我们作为开发者,是能够知道我们需要的数据的条数的,若已经知道结果只有一条的时候,一定要使用limit 1 ,这样一来,MySQL在查询到一条数据之后,会立即停止搜索,这会带来性能上的提升

避免select * ,取之所需。公司里的一些同事,无论查询什么都是直接select *,然后再从结果中取想要的字段。这样做的话,平白无故的给MySQL带来了不必要的负担,因为从数据库中读出越多的数据,查询就会变得越慢。所以,以后看到select * 的时候,想一下是否可以在这里进行一些优化。

尽可能的使用not null。除非你有一个很特别的原因要去使用null值,你应该总让你的字段保持为not null。

在Join表的时候使用相当类型的例,并将其索引 

千万不要 ORDER BY RAND() 

四、查找数据库的瓶颈方法和工具

五、

参考文档:

https://www.cnblogs.com/pengyunjing/p/6591660.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值