Mysql优化

1. 服务器层面

  1)尽量数据存到内存,Innodb_buffer_pool_size建议设为服务器总内存的 3/4 或者 4/5

    如果我们到mysql那查看 SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_%'

             看到 Innodb_buffer_pool_pages_free为0,那么就说明配给mysql的内存不够了

  2)减少IO

    当然我们无法减少数据的IO,但是我们可以减少不必要的日志的开启

  3)加内存,更换更好的磁盘

    我们可以给服务器加内存,并增大分配给mysql的内存数;同时我们可以考虑更换磁盘为固态硬盘ssd

2. SQL设计优化

  1)中间表 (定时去把需要多表关联数据写到一个表,避免实时去跨多表查询,但是这个只适合一些对实时性要求不高的数据)

  2)冗余字段 (为了避免跨表查询,但是需要注意一致性)

  3)合理拆表 (一个表字段太多,会导致索引数据特别大,查询自然变慢;不经常使用的字段/比较大的字段也可以考虑拆开)

  4)主键索引 (在不考虑分布式式下,最好是int 自增)

3. 开发层面(索引)

  1)为搜索字段建立索引

  2)组合索引尽量要有顺序

  3)尽量不要用select *,而用“覆盖索引”

  4)order by,group by尽量使用索引(不然mysql会用文件排序)

  5)如果预计只会返回一条数据(在查非唯一索引的情况下),用LIMIT 1(找到后立即返回,避免全表搜索)

  6)跨表条件数据类型要一致,否则索引会失效

  7)尽量不使用SQL内置函数,不然不会把查询存到Buffer

原文地址:https://www.cnblogs.com/amiezhang/p/10327341.html