标签:表关联 多表关联 返回 glob 顺序 ODB buffer 不必要 pool
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
标签:表关联 多表关联 返回 glob 顺序 ODB buffer 不必要 pool
原文地址:https://www.cnblogs.com/amiezhang/p/10327341.html