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