《高性能MySQL》第6章查询性能优化(4)

优化特定类型的查询

优化SQL_CALC_FOUND_ROWS

前文提到使用这个提示符可以获取限制前的行数,但是它会扫描符合条件的所有行。这个可用来做一个是分页时,后续还有多少页的功能,不过更好的方式是只显示个下一页,如果有数据显示到下一页的数据,如果没有提示到达了末尾。

优化UNION

MySQL通过创建并填充临时表的方式来执行UNION,因此很多优化无法在UNION查询中很好应用。所以需要手动将WHERE、LIMIT、ORDER BY等语句下推到UNION子查询中。
如果不是需要对结果去重,请使用UNION ALL。即使有ALL,MySQL也会将结果先存于临时表中,再读出,这很多时候是没有必要的。

静态查询分析

Percona Toolkit中的pt-query-advisor能够解析查询日志,分析查询模式,给出可能存在潜在问题的查询。

使用用户自定义变量

用户自定义变量是一个用来存储内容的临时容器。

SET @ONE  := 1

它能够方便一些查询。不过一些场景需要注意

  1. 自定义变量的查询无法使用查询缓存
  2. 不能再常亮或者标识符的地方使用自定义变量。
  3. 生命周期在一个连接内有效
  4. 使用连接池或者持久化连接,可能会让一些不相干代码产生交互
  5. 5.0之前大小写敏感
  6. 不能显示声明类型
  7. 优化器可能会将其优化掉
  8. 赋值和顺序的时间点并不总是固定的,由优化器决定
  9. :=优先级较低,请使用括号
  10. 使用未定义的变量不会报错

例子之后再补吧,家里停电了…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值