日期:2014-05-16  浏览次数:20714 次

mysql优化方面的一些建议(转载)

与群友闲聊中得到的一些东西,记下了,备查

mysql优化方面:

1,字段数据类型一般选用小点的,比如timestamp比datetime小点,前者占用4字节,后者8字节。假如不需要天的,用date也行。

2,选用更小的字符集,能覆盖就行,不一定非得utf-8.(效率有时候差别较大)

3,减少关联查询,一般比如每次查询都得关联另外的表的,用冗余字段。(不必守旧三大范式)

4,并不是select后字段越少效率越高,因为这只是针对列存储的数据库,对于行级的,select xx的时候仍然会查询整条记录。

5,一般小点的 比如1-10之内的整数,或者更多点的 几十以内的,用tinyint基本搞定。不必用int或者更大。

6,避免text,往往varchar基本足够,假如碰到text这类大字段,采用分表。

7,索引方面,不要把更新频繁的字段设为索引。

8,最要不要再数据库内设置外键,数据库维护外键是需要状态 需要资源的,而且也得维护外键本身的索引。在应用中做扩展好点(虽然 也需要自己维护外键,但是自己可以把我一些细节)

9,最好减少排序。

10,假如加了索引,最好手动定期进行索引碎片整理(特别是数据更新频繁的时候)。

11,加索引的时候 不要再索引上加上各种运算(否则索引会失效)

12,尽量用join代替子查询,尽早把无用数据先过滤掉,比如在主表的where条件,或者分页或者排序等等,先在主表过滤掉,然后再 join附表,以免进行过多的数据查询操作。

?

?

mysql引擎选择方面

这次大会基本上只讲解了Myisam和innoDb两种。并且区分了一些使用。怎样选择得看本表的数据状况。

myisam:不需要事务支持的表;数据更新不太频繁的表;建议使用此引擎,一般来说此引擎的表查询速度比较快。

innodb:有事务操作的时候(选择myisam就不行 因为它不支持事务);并发操作多的表(因为是行锁,不像上面那个是表锁,性能肯定 好多了);数据频繁更新的表;内存不多的时候;建议选择此引擎。