欢迎来到天天文库
浏览记录
ID:44238890
大小:580.50 KB
页数:25页
时间:2019-10-20
《MySql数据库的性能优化》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、MySQL数据库的性能优化数据库性能优化的必要性应用程序对数据库操作的重视网页对数据复杂逻辑的更多要求网页对数据查询速度的更多要求能以较少的工作量达到整体性能的较大提升避免应用系统效率低下、资源严重浪费MySQL数据库优化的几个方面硬件的优化操作系统的优化MySQL系统配置的优化MySQL语句的优化MySQL索引的优化MySQL表结构的优化硬件的优化如果需要庞大的数据库表(>2G),应考虑使用64位的硬件结构对大数据库,优化的次序一般是RAM、快速硬盘、CPU能力对于数据库存放在一个专用服务器的系统,应该考虑1G的以太网操
2、作系统的优化不要交换区,增加更多的内存增加系统和MySQL服务器的打开文件数量增加系统的进程和线程数量使用支持大文件的文件系统(如:Solaris)MySQL系统配置的优化MySQL编译安装参数的优化MySQL服务器参数的调整优化,通过修改/etc/my.cnf(my.ini)文件优化服务器配置参数对于InnoDB表尤为重要MySQL语句的优化1、ISNULL与ISNOTNULL不能用null作索引如果某列存在空值,即使对该列建索引也不会提高性能任何在where子句中使用isnull或isnotnull的语句,优化器是不允
3、许使用索引的MySQL语句的优化2、使用连接(JOIN)来代替子查询(Sub-Queries)MySQL从4.1开始支持SQL的子查询,使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,如下所示:SELECT*FROMcustomerinfoWHERECustomerIDNOTin(SELECTCustomerIDFROMsalesinfo)如果使用连接(JOIN)..来完成这个查询工作,速度将会快很多。尤其是当salesinfo表中对CustomerID建有索引的话,性能
4、将会更好,查询如下:SELECT*FROMcustomerinfoLEFTJOINsalesinfoONcustomerinfo.CustomerID=salesinfo.CustomerIDWHEREsalesinfo.CustomerIDISNULL连接(JOIN)..之所以更有效率一些,是因为MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作。MySQL语句的优化3、使用联合(UNION)来代替手动创建的临时表可以把需要使用临时表的两条或更多的SELECT查询合并的一个查询中,在客户端的查询会
5、话结束的时候,临时表会被自动删除,从而保证数据库整齐、高效,如下所示:SELECTName,PhoneFROMclientUNIONSELECTName,BirthDateFROMauthorUNIONSELECTName,SupplierFROMproductMySQL语句的优化4、使用事务处理繁琐SQL语句的操作当需要用到一系列的语句来完成某种工作时,应该使用事务;它的作用是:要么语句块中每条语句都操作成功,要么都失败。如下所示:BEGIN;INSERTINTOsalesinfoSETCustomerID=14;UPD
6、ATEinventorySETQuantity=11WHEREitem='book';COMMIT;用ROLLBACK命令就可以把数据库恢复到BEGIN开始之前的状态。事务的另一个重要作用是当多个用户同时使用相同的数据源时,它可以利用锁定数据库的方法来为用户提供一种安全的访问方式,这样可以保证用户的操作不被其它的用户所干扰。MySQL语句的优化5、使用锁定表(LOCKTABLE)的操作事务因为它的独占性,有时会影响数据库的性能,尤其是在较大的应用系统中。有些情况下我们可以通过锁定表的方法来获得更好的性能。如下所示:LOCK
7、TABLEinventoryWRITESELECTQuantityFROMinventoryWHEREItem='book';...UPDATEinventorySETQuantity=11WHEREItem='book';UNLOCKTABLESMySQL语句的优化6、使用外键(FOREIGNKEY)锁定表的方法可以维护数据的完整性,但是它却不能保证数据的关联性。这个时候我们就可以使用外键。如下所示:CREATETABLEcustomerinfo(CustomerIDINTNOTNULL,PRIMARYKEY(Custo
8、merID))TYPE=INNODB;CREATETABLEsalesinfo(SalesIDINTNOTNULL,CustomerIDINTNOTNULL,PRIMARYKEY(CustomerID,SalesID),FOREIGNKEY(CustomerID)REFERENCEScustomerin
此文档下载收益归作者所有