q
核心思路
尽量避免全表扫描 - 索引解决
将常用查询的where进行组合索引的建立
limit
分表功能时,会出现深翻页情况,深翻页就需要进行一个嵌套查询,用where语句限定一下深表的一个范围再查,这样避免直接使用limit出现全表扫描的情况
外链接
字符
避免排他符,比如!=,not in
硬件排查
select @@profiling
show variables like %profil%
set profiling = 1
show profiles
show profile for query 3
show profile cpu,swaps for query3
缓冲区优化
show global status like ‘innodbbuffer_pool_pages%’ ,dirty是脏页,free是空闲空间
缓冲区不够的话脏页落盘就会比较频繁,那就内存硬盘交换会比较多。
如果free关键字所对应的数字是0,那内存被用光了
innodb_buffer_pool_size 缓冲区大小应该是系统的3/4,4/5的大小
innodb_flush_log_at_trx_commit=1 redolog刷新到磁盘的策略
sync_binlog = 1 binlog同步策略
innodb_max_dirty_pages_pct=30 脏页内存分配
innodb_io_capacity = 200 进程io交互 ,如果用的是固态那调到5000-20000都没问题