• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
我的成长足迹
夫志当存高远
博客园    首页    新随笔    联系   管理    订阅  订阅

mysql

1、mysql的子查询实现的很烂,会发生不使用索引的问题,据官方说6以后会改善。
例如:select * from ol_question where questionid in (select questionid from ol_questiontag)
正常应该是查询完ol_questiontag中的questionid后在通过索引查询ol_question 中数据,但是通过explain下的观察在查询ol_question 时竟然没有利用到主键索引,大bug。。。
mysqlsubquery.jpg
 
2、explain和profiling是查询优化的好助手。
3、索引的一个最大好处是在排序的时候。而且group的时候也可以享受到。但是切记不可对同一字段进行两次排序,教训啊。在最近对试题查询进行优化的时候(最后发现是因为数据传输而不是查询慢…)发现同事存在一个误区,给一些枚举字段建索引,这样的索引没有意义唯一性太低的字段不适合建索引。具体原因参考数据库索引的机制。而且据说数据库只会使用一个索引?!
4、避免过于面向对象导致N+1问题,如试题查询曾经遇到的问题。

5、join的优化

查了些资料,mysql在join时是使用nested loop join,也就是说在join表时是用驱动表作为结果集到其他表中进行循环,并且合并结果集,知道这样的思路也就知道了应该注意的地方:也就是以小结果集来驱动大结果集,这样可以提高性能。而且要注意给join的字段加索引。

6、对表中大字段的处理

现在所做的项目中试题表由于题目内容较大,查询就应该分场景进行,仅在需要的时候去读取大字段的内容,这样可以减少网络传输,甚至可以考虑分表进行存储,这样可以减少查询时数据库读取大字段,而且据说除非在索引中完成的查询,否则即使查询其他字段,数据库在查询时候也会去读取大字段(待验证)。
(待续…)

posted @ 2010-01-22 15:48  bwbwbw1984  阅读(260)  评论(2)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3