`
shhbobby
  • 浏览: 3949 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

数据库sql语句优化基础知识普及

阅读更多
  •  MySQL里面的join顺便说一句就是,通常有点讲究的是用小表去驱动大表,而由于MySQL join实现的原理就是做循环比如left join就是对左边的数据进行循环去驱动右边的表,比如左边是可能会有m条记录匹配,右边有n条记录那么就是做m次循环,每次扫描n行数据,总扫面行数是 m*n行数据.左边返回的结果集的大小就决定了循环的次数,故单纯的用小表去驱动大表不一定的正确的,小表的结果集可能也大于大表的结果集,所以写 join的时候尽可能的先估计两张表的可能结果集,用小结果集去驱动大结果集.值得注意的是在使用left/right join的时候,从表的条件应写在on之后,主表应写在where之后.否则MySQL会当作普通的连表查询!
  • COUNT(*)通常是对主键进行索引扫描,而COUNT(COL)就不一定了,另外前者是统计表中的所有符合的纪录总数,而后者是计算表中所有符合的COL的纪录数。
  • 简单说下,就是COUNT的时候,如果没有WHERE限制的话,MySQL直接返回保存有总的行数
    而在有WHERE限制的情况下,总是需要对MySQL进行全表遍历。

    优化总结
    1.任何情况下SELECT COUNT(*) FROM tablename是最优选择;
    2.尽量减少SELECT COUNT(*) FROM tablename WHERE COL = ‘value’ 这种查询;
    3.杜绝SELECT COUNT(COL) FROM tablename WHERE COL2 = ‘value’ 的出现。

  • http://dev.mysql.com/doc/refman/5.1/zh/optimization.html更多的优化策略

 

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics