mysql性能优化配置,优化方案整理

KLQ 2020-05-14 10:23:52 java常见问答 9504

大家知道mysql性能优化的方法有哪些吗?下面要给大家介绍的就是一些mysql性能优化的方案,一起来详细的了解一下吧!

一、选取最适用的字段属性

一般来讲的话,数据库当中的表越小,那么在MySQL上面执行的查询也就会非常的快,所以,在创建表的时候,我们可以将表中字段的宽度设置的尽量小一些。

除此之外,在尽可能的情况之下,尽量的将字段设置成NOT NULL,这样的话,在执行查询的时候,数据库就不需要去比较NULL值了。

二、事务

虽然,我们能够使用联合(UNION)、子查询(Sub-Queries)以及连接(JOIN)来创建查询,可是,要知道的是,并不是所有的数据库操作都能够只用到一条或者是几条SQL语句就能够完成的。

在大多数的情况下,需要用到一系列的语句来完成某种工作。

可是在这样的情况之下,在语句块中的某一条语句运行出错时,整个语句块的操作就会变得不确定了。

设想:

假如将某个数据同时插入两个相关联的表中,很有可能就会出现以下的情况:

第一个表中成功更新之后,数据库突然出现意外,这就导致了第二个表中的操作不能完成,最终导致数据的不完整,甚至是会破坏数据库中的数据,那么想要避免这样的情况的话,我们就要使用事务。

事务的作用是什么?

可以保持数据库中数据的一致性和完整性

BEGIN;
  INSERT   INTO   salesinfo   SET   customerid=14;
  UPDATE   inventory   SET   quantity =11   WHERE   item='book';
COMMIT;

三、使用连接(JOIN)来代替子查询(Sub-Queries)

MySQL从4.1开始支持SQL的子查询。

这可以使用SELECT语句来创建一个单列的查询结果,之后将这个结果当做过滤条件用在另一个查询当中。

例:

DELETE  FROM  customerinfo
 
WHERE  CustomerID  NOT  in  (SELECT customerid  FROM  salesinfo)

将客户基本信息表中没有任何订单的客户删除掉,这就可以通过子查询先从销售信息表中将所有发出订单的客户ID取出来,之后,将结果传递给主查询。

使用子查询能够一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,与此同时,还可以避免事务或者是表锁死,写起来也是非常的简单。

可是,在某些情况之下,查询能够被更有效率的连接(JOIN)..替代。

例:

SELECT  *  FROM  customerinfo
 
WHERE  customerid  NOT IN (SELECT customerid   FROM   salesinfo)

将所有没有订单记录的用户全部都取出来。

假如,是使用连接(JOIN)..来完成这个查询工作的话,那么速度就会快速非常的多了。

尤其是在salesinfo表中对CustomerID建有索引的话,性能将还会更加的好。

为什么链接(JOIN)..会更有效率?

这主要就是因为MySQL不要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作。

SELECT  *  FROM  customerinfo
 
LEFT  JOIN  salesinfo  ON   customerinfo.customerid =salesinfo.customerid
 
WHERE  salesinfo.customerid   IS NULL

四、使用联合(UNION)来代替手动创建的临时表

MySQL从4.0的版本开始支持union查询。

union查询可以将需要使用临时表的两条或者是更多的select查询合并的一个查询中。

在客户端的查询会话结束时,临时表就会被自动删除,这就保证了数据库的整齐和高效。

使用union查询时,只要将UNION作为关键字将多个select语句连接即可。

注:所有select语句中的字段数目要相同。

例:

SELECT   name,phone  FROM  client UNION
 
SELECT  name,birthdate  FROM  author  UNION
 
SELECT  name,supplier FROM product

以上的四中方案你都了解了吧,当然方案远远不止这些,更多方案,可以继续关注奇Q工具网的java架构师栏目来了解哦!

推荐阅读:

JVM调优,JVM如何调优?

优化SQL的方法有哪些?为什么要优化SQL?

tomcat性能优化怎么配置?tomcat性能调优详解