mysql简单优化
对于互联网开发都少不了和数据库接触,sql server,mysql,oracle,这是几个主流的数据库了,其中mysql又是这里面的主流(除了一些核心数据需要oracle的支持),所以我接触最多的数据就是mysql。
我不是dba,我只是一个小小的rd,所以以我现在的了解的去简单介绍下怎么优化mysql的io,互联网开发的RD几乎都知道一个网站流量大了,其中最大的瓶颈大部分都是在IO上,其中数据库涉及到的IO又是最平凡的。
在这里我们就认为整个系统的瓶颈在mysql上,接下来我们准备怎么优化?
1.选择正确的引擎,建表的时候特别要注意需要合适的数据库引擎(ISAM,MyISAM,HEAP,InnoDB),对于RD接触最多的就是myisam和innodb这两个引擎。
myisam:MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMCHK工具和用来恢复浪费空间的 MyISAMPACK工具。MYISAM强调了快速读取操作,这可能就是为什么MySQL受到了WEB开发如此青睐的主要原因:在WEB开发中你所进行的大量数据操作都是读取操作。所以,大多数虚拟主机提供商和INTERNET平台提供商只允许使用MYISAM格式。MyISAM格式的一个重要缺陷就是不能在表损坏后恢复数据。
innodb:InnoDB数据库引擎都是造就MySQL灵活性的技术的直接产品,这项技术就是MYSQL++ API。在使用MYSQL的时候,你所面对的每一个挑战几乎都源于ISAM和MyISAM数据库引擎不支持事务处理(transaction process)也不支持外来键。尽管要比ISAM和 MyISAM引擎慢很多,但是InnoDB包括了对事务处理和外来键的支持,这两点都是前两个引擎所没有的。如前所述,如果你的设计需要这些特性中的一者 或者两者,那你就要被迫使用后两个引擎中的一个了。
对于选择什么样的引擎请看:http://www.cnblogs.com/sopc-mc/archive/2011/11/01/2232212.html
2.选择正确是字段类型,这对我们以后的索引和数据量很大的时候都有好处,比如:日期2013-04-28我们可以用long类型也可以用String类型,当有100w数据量的时候,使用long类型的需要磁盘的大小为8字节*1000000=8000000byte,使用String则可以认为是10个char,需要的磁盘大小为:2字节*10*1000000=20000000byte,如果加上年月日那相差更大。
3.创建表的时候,注意业务的需要,劲量少连表查询,那设计表的结构的时候可以有冗余,数据量比较大的时候连表查询很影响性能。
现在我们就可以用刚才创建的表了,增删改查.....while(增删改查),突然有一天mysql堵了很多链接不释放,打开慢日志查询,发现了很多的sql都很慢,怎么办呢!sql优化不是一时半会能优化好的了,还容易出错,有什么办法呢?
4.添加索引,索引对于数据库优化可以说是万金油了,但对于添加索引,我们也要注意很多地方,哪里加了索引带来了很大的速度提升,哪里加了反而影响了性能,对于怎么添加索引,异步到:http://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html
现在好了,终于缓过来了,网站又刷刷的了,又过了一段时间,网站的列表页打开又很慢了啊,看看数据库中的表的记录也不是太多啊,那看看sql能不能优化,http://database.51cto.com/art/201006/205790.htm 优化后感觉好多了。过了一些时间了,同样的问题一样出现了,由于这段时间的注册用户越来越大,数据量也越来越大,一个表里面都是以千万级的了,怎么办?
5.分库分表,怎么分库分表,这个网上有许多案例,我就不详细介绍了,有一天,客服MM打电话过来说用户反馈网站打不开了,登录到后台一看,原来数据库的那个磁盘坏了,这么大的事只能贴个网站维护了,去修磁盘了,公司老板开会说这次故障影响太大,你们的kpi已经没了,多么痛苦的消息啊!下次坚决不能再出现这个问题了,搞个主备吧!搬了一台机子,搞了个实时同步(实际上做不到实时同步了,有时间延迟),当master出问题,可以把备份的机器当master去用,可磁盘也不是那么容易损坏的了,这样是不是备份的那台机器太浪费了,想了想,两台机器可以搞个读写分离.......
时间过的真快.....下次继续吧!