q

覆盖索引?

核心思路

尽量避免全表扫描 - 索引解决
将常用查询的where进行组合索引的建立

limit

分表功能时,会出现深翻页情况,深翻页就需要进行一个嵌套查询,用where语句限定一下深表的一个范围再查,这样避免直接使用limit出现全表扫描的情况

外链接

小表驱动大表+关联字段的索引

字符

避免排他符,比如!=,not in

硬件排查

  1. select @@profiling
  2. show variables like %profil%
  3. set profiling = 1
  4. show profiles
  5. show profile for query 3
  6. 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都没问题