码迷,mamicode.com
首页 > 数据库 > 详细

mysql性能优化

时间:2015-01-13 23:07:43      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

1、MyISAMInnoDB的选择。

  MyISAM用的是表锁,InnoDB用的是行锁。

  MyIsam写优先,进行写操作时,会锁表。InnoDB写操作时锁行。因而如果写操作比较频繁应该用InnoDB较好。

  另MyIsam 语句select count(*) from table数据直接被缓存了。而InnoDB则仍需逐行读取,因而较慢。但如果加上where条件,二者就差不多了

2、善用MySQL查询缓存。

  不要写些变态语句。例如查询条件中加上NOW() ,CURDATE()等条件。无法缓存。

3、合理建立索引。

  Mysql索引有四种类型:主键索引(primary key)、唯一索引(unique key)、普通索引(key)、全文索引(full)[innodb不存在这种类型]。

4、查询语句性能分析

  通过explan来分析查询语句。

  select SQL_NO_CACHE... 来避免查询缓存的使用。

5、当只要一行数据时使用 LIMIT 1 

  使用limit 1来避免全表检索。

6、避免select * 。

  从数据库里读出越多的数据,那么查询就会变得越慢。并且,如果你的数据库服务器和WEB服务器是两台独立的服务器的话,这还会增加网络传输的负载。 并且会加重查询缓存的负担。

7、尽可能的使用NOT NULL值。

8、固定长度的表会更快。

  固定长度的表会提高性能,因为MySQL搜寻得会更快一些,因为这些固定的长度是很容易计算下一个数据的偏移量的,所以读取的自然也会很快。

9、垂直分割。

  “垂直分割”是一种把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的。

  示例一:在Users表中有一个字段是家庭地址,这个字段是可选字段,相比起,而且你在数据库操作的时候除了个人信息外,你并不需要经常读取或是改写这个字段。那么,为什么不把他放到另外一张表中呢? 这样会让你的表有更好的性能,大家想想是不是,大量的时候,我对于用户表来说,只有用户ID,用户名,口令,用户角色等会被经常使用。小一点的表总是会有好的性能。 

  示例二: 你有一个叫 “last_login” 的字段,它会在每次用户登录时被更新。但是,每次更新时会导致该表的查询缓存被清空。所以,你可以把这个字段放到另一个表中,这样就不会影响你对用户 ID,用户名,用户角色的不停地读取了,因为查询缓存会帮你增加很多性能。 

  另外,你需要注意的是,这些被分出去的字段所形成的表,你不会经常性地去Join他们,不然的话,这样的性能会比不分割时还要差,而且,会是极数级的下降。 

10. 拆分大的 DELETE 或 INSERT 语句 

mysql性能优化

标签:

原文地址:http://www.cnblogs.com/killallspree/p/4222627.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!