MySql数据库优化能够从哪几个方面进行?

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

MySQL能够很好的支持大数据量的存取,可是通常说来,数据库中的表越小,在它上面执行的查询也就会越快。所以,在建立表的时候,为了得到更好的性能,咱们能够将表中字段的宽度设得尽量小。html

例如,在定义邮政编码这个字段时,若是将其设置为CHAR(255),显然给数据库增长了没必要要的空间,甚至使用VARCHAR这种类型也是多余的,由于CHAR(6)就能够很好的完成任务了。一样的,若是能够的话,咱们应该使用MEDIUMINT而不是BIGIN来定义整型字段。数据库

另一个提升效率的方法是在可能的状况下,应该尽可能把字段设置为NOTNULL,这样在未来执行查询的时候,数据库不用去比较NULL值。
对于某些文本字段,例如“省份”或者“性别”,咱们能够将它们定义为ENUM类型。由于在MySQL中,ENUM类型被看成数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。这样,咱们又能够提升数据库的性能。性能

 

 

 ----------------------------大数据

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

MySQL从4.1开始支持SQL的子查询。这个技术可使用SELECT语句来建立一个单列的查询结果,而后把这个结果做为过滤条件用在另外一个查询中。优化

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

SELECT * FROM  customerinfo.net

WHERE CustomerID NOT in(SELECT CustomerID FROM salesinfo)3d

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

SELECT * FROM customerinfohtm

LEFT JOIN salesinfo ON customerinfo.CustomerID = salesinfo.CustomerID

WHERE salesinfo.CustomerID IS NULL

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

 

建立索引的原则:http://blog.csdn.net/csdnones/article/details/50412603

------------------

三、使用联合(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

表:

 

----------------------------

数据库优化:

https://www.cnblogs.com/cy163/archive/2008/12/25/1362145.html

相关文章
相关标签/搜索