MySQL数据库性能进行优化三大绝招

如下的文章主要介绍的是对MySQL数据库性能进行优化的的几大绝招,其中包括选取最适用的字段属性,使用链接(JOIN)来代替子查询(Sub-Queries),使用联合 (UNION)来代替手动建立的临时表的内容介绍。 数据库

1. 选取最适用的字段属性 性能

MySQL能够很好的支持大数据量的存取,可是通常说来,数据库中的表越小,在它上面执行的查询也就会越快。所以,在建立表的时候,为了得到更好的性能,咱们能够将表中字段的宽度设得尽量小。例如,在定义邮政编码这个字段时,若是将其设置为CHAR(255),显然给数据库增长了没必要要的空间,甚至使用VARCHAR这种类型也是多余的,由于CHAR(6)就能够很好的完成任务了。一样的,若是能够的话,咱们应该使用MEDIUMINT而不是BIGIN来定义整型字段。 大数据

另一个提升效率的方法是在可能的状况下,应该尽可能把字段设置为NOT NULL,这样在未来执行查询的时候,数据库不用去比较NULL值。 优化

对于某些文本字段,例如“省份”或者“性别”,咱们能够将它们定义为ENUM类型。由于在MySQL中,ENUM类型被看成数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。这样,咱们又能够提升数据库的性能。 编码

2. 使用链接(JOIN)来代替子查询(Sub-Queries) spa

MySQL从 4.1开始支持SQL的子查询。这个技术可使用 SELECT语句来建立一个单列的查询结果,而后把这个结果做为过滤条件用在另外一个查询中。例如,咱们要将客户基本信息表中没有任何订单的客户删除掉,就能够利用子查询先从销售信息表中将全部发出订单的客户ID取出来,而后将结果传递给主查询,以下所示: 索引

DELETE FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo ) 事务


使用子查询能够一次性的完成不少逻辑上须要多个步骤才能完成的SQL操做,同时也能够避免事务或者表锁死,而且写起来也很容易。可是,有些状况下,子查询能够被更有效率的链接(JOIN)替代。例如,假设咱们要将全部没有订单记录的用户取出来,能够用下面这个查询完成: 内存

SELECT * FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo ) 效率


若是使用链接(JOIN)来完成这个查询工做,速度将会快不少。尤为是当salesinfo表中对CustomerID建有索引的话,性能将会更好,查询以下:

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


链接(JOIN)之因此更有效率一些,是由于 MySQL不须要在内存中建立临时表来完成这个逻辑上的须要两个步骤的查询工做。

3. 使用联合 (UNION)来代替手动建立的临时表

MySQL 从 4.0 的版本开始支持 UNION 查询,它能够把须要使用临时表的两条或更多的 SELECT 查询合并的一个查询中。在客户端的查询会话结束的时候,临时表会被自动删除,从而保证数据库整齐、高效。使用 UNION 来建立查询的时候,咱们只须要用 UNION做为关键字把多个 SELECT 语句链接起来就能够了,要注意的是全部 SELECT 语句中的字段数目要想同。下面的例子就演示了一个使用 UNION的查询。

SELECT Name, Phone FROM client UNION SELECT Name, BirthDate FROM author UNION SELECT Name, Supplier FROM product

上述的相关内容就是对于优化MySQL数据库性能的“妙手”的描述,但愿会给你带来一些帮助在此方面。

相关文章
相关标签/搜索