MySQL程序开发注意事项
WilFre
8年前
<p>随着云服务的迅速发展,很多公司逐步开始将业务上云,对于开发人员来说,将需要做很大的改变,需要从原来的Oracle、DB2等数据库转型到MySQL数据库上来。</p> <p>那么MySQL程序开发的时候有哪些注意事项呢?</p> <p>1、 资源限制</p> <p>资源方面,MySQL每个查询只能用到1个CORE,并且不同版本对CPU资源有不同的限制(如:5.6版本最多使用48个CORE)。</p> <p>2、 磁盘 IO</p> <p>对于磁盘IO方面,我们应根据数据文件的类型来分配磁盘的使用,对于IO类型有顺序IO和随机IO两种,顺序IO类似binLog、redolog、undolog之类,对于数据库表文件的访问基本上都属于随机IO类型,所以我们应该把数据文件应该放在IO性能更好的磁盘,还有,在我们设计的时候,尽量多考虑数据库聚簇索引的内部排序特性,使其访问时顺序IO和随机IO的相结合。</p> <p>3、 结果缓存</p> <p>MySQL提供的结果缓存功能,与Oracle、DB2数据库的缓存相比,性能悬殊较大,对于OLTP系统,数据变更较大的,建议关闭。</p> <p>4、 性能问题</p> <p>MySQL随着连接数上升会出现性能会下降,所以不是连接数越多越好,适可而止,不过我们可以通过一些官方的收费组件TP来优化此问题。</p> <p>5、 存储引擎选择</p> <p>目前MySQL支持的存储引擎有MyASAM、InnoDB、MEMORY、MRG_MyASM等等,需要根据实际业务情况来选择存储引擎,具体比较如下表:</p> <p><img src="https://simg.open-open.com/show/f15619f16b53cf158803fc084d138e2e.png"></p> <p>6、 子查询</p> <p>有关子查询方面,MySQL支持子查询,但性能较差,对于低版本的MySQL,建议不用子查询。</p> <p>7、 数据存储</p> <p>数据存储方面,建议考虑分库分表,也对单表进行分区,MySQL的分区功能没有像Oracle那样完善,局限性比较多,具体如下表:</p> <p><img src="https://simg.open-open.com/show/c74853eb375ba9f1e15f2ffbf2fe6ee0.png"></p> <p>分区的特性:</p> <ul> <li> 可以存储更多的数据</li> <li> 提高查询效率</li> <li> 便于进行历史数据的管理</li> <li> 获得更高的吞吐量</li> <li>并不是所有存储引擎支持分区,如:MERGE</li> <li>在同一张表上,不能对分区使用混合存储引擎:</li> </ul> <p><img src="https://simg.open-open.com/show/12d2edf4f6648ffd5501cc3151e1f692.png"></p> <p>大表一定要拆分,否则会出现性能问题,具体是采用分区还是分表和分库,可以根据实际情况来处理。</p> <p>8、 少用复杂SQL语句</p> <p>复杂的SQL语句尽量少用,复杂的SQL一般会出现性能问题。</p> <p>9、检查每一句SQL执行计划</p> <p>对于每一个SQL语句,都要检查SQL的执行计划,方法如下:</p> <p><img src="https://simg.open-open.com/show/bc6b39b7378f4c8a0f381c1ff91bf2a8.png"></p> <p>type的说明如下表:</p> <p><img src="https://simg.open-open.com/show/15bf8d192f3545c8b598216e6ccce18c.png"></p> <p>10、谨慎考虑SQL语句</p> <p>还有一个需要注意,MySQL的一个SQL只使用一个索引,这与其它数据库类似,在建立索引的时候需要充分考虑,尽量建索引在重复性低的字段上,能建唯一索引或主键的一律建唯一索引或主键。</p> <p> </p> <p>来自: <a href="/misc/goto?guid=4959673864139303227" rel="nofollow">http://rdcqii.hundsun.com/portal/article/431.html</a></p> <p> </p>