Skip to content
  • 过慢
    • 有的时候,在程序中打印 sql 执行的时间日志,发现很慢,但是单独查询发现不慢,是因为这些 sql 在等待前面的 sql 执行完成,这个时候可以配置 dao 有个连接池,多条连接并行查询
    • 也可以调整 buffer pool,提高查询命中效率
      • 可以通过show status like 'Innodb_buffer_pool_%'查询一些命中率,计算方式1 - (Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests) * 100%,这个可以做在监控里面
  • Union:会创建临时表
    • 直接 Union:会去重
    • Unionall:不会去重
  • 临时表:
    • Union
    • from 中的子查询
    • distinct 并且有 order by 时
    • order by 和 group by 子句已补样时
    • EXPLAIN查看执行计划的 extra 中,有 Using Temporary 就会用到临时表
  • 使用 between and 代替 in
  • 不要使用 ! 或者 > 操作符
  • join 一般比子查询效率高:如果有合适的索引的情况下
    • 也可以使用如 MAX()的聚合函数代替子查询
  • 限制子查询结果集大小
  • join:
    • 外连接:也可以在 join 前面显示加上 outer,不过一般省略
      • left join:以左表符合条件的数据为准,右表不符合的直接显示为 NULL
      • right join:以右表符合条件的数据为准,左表不符合的直接显示为 NULL
      • full join:左表所有符合条件的数据 + 右表所有符合条件的数据,缺省数据补 NULL
        • Mysql 不支持,PG 支持
    • 内连接:

正在精进