MySQL简单优化方案

1. 使用压缩可以减少IO。大表可考虑使用compressed行格式,这样可以减少IO。

2. 使用explain来看使用了哪些索引,应该避免大表的全表scan

3. 定期执行ANALYZE TABLE ,它对join操作有益,帮助决定使用索引的顺序。执行过程会加只读锁。

4. innodb buffer pool的合理配置能减少IO。配置项innodb_buffer_pool_size大于1GB时,innodb_buffer_pool_instances才生效,将innodb_buffer_pool_size分成多个块是为了减少读写冲突。推荐innodb_buffer_pool_size / innodb_buffer_pool_instances为1GB大小。此缓存使用LRU算法。

 5. where语句尽量少使用括号

 6. 插入语句,有默认值的字段不要写,减少sql的解析时间。注意插入有两种语法,一种是:insert into xxx (name, age) values ('wangyang', 100),另一种是:insert into xxx set name='wangyang', age=100。

 7. 尽量使用小整型[unsigned]tinyint smallint mediumint bigint

 8. 索引越小查询和读取就越快,所以使用小整型,不使用就不建索引,一级索引一定是频繁使用否则就不建

 9. 尽量避免NULL:应该指定列为NOT NULL,除非你想存储NULL。在MySQL中,含有空值的列很难进行查询优化,而且对表索引时不会存储NULL值的,所以如果索引的字段可以为NULL,索引的效率会下降很多。因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用0、一个特殊的值或者一个空串代替空值。

10. 字段名考虑要短小,最好能在不同表中反复利用

11. 字段小于8K时,使用varchar,而不是blob,这样可以使用临时表的优化

12. 像在一个user表里,有地址、描述之类的它,它们较大而又不常使用,应该分到另一个表里存,在必要时使用join来查。总之,一个block存放的row越多,就越省内存,省时间。

13. 连续的主键,其数据也是连续存储的,所以如果是随机生成的值当主键,最好添加一个递增的前缀,比如当前时间什么的。

14. 大量的insert delete update操作之后,使用optimize table XXX可以减少磁盘孔洞和碎片,重建索引,有时可以明显提升性能。innoDB实际就是重建表。

15. 变长字符串使用varchar而不是char(N),因为char(N)总是会分配N大小空间

16. innodb_checksum_algorithm=strict_crc32 可以加快摘要计算,但是跟老版本会不兼容

发表于 2016年03月31日 23:18   评论:0   阅读:2060  



回到顶部

首页 | 关于我 | 关于本站 | 站内留言 | rss
python logo   django logo   tornado logo