MySQL学习笔记整理(五)

前言

       这篇我们从sql语句优化开始分析,这个时最基础的,可能我们在使用过程中都没有注意,也没有相关经验,但是有了这个意识,我们需要看别人总结的经验,自己去记忆和动手试下实例,加深理解。然后从mysql引擎的选择等方面进行分析,更恰当的去使用mysql。

sql语句的技巧

group by和having

       在使用group by 分组查询是,默认分组后,还会排序,可能会降低速度.例子如下:


       在group by 后面增加 order by null 就可以防止排序.

tips:mysql中group by having 用法需要注意的事项:

  1. GROUP BY:
    group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by后面。
    比如 select name,sum(point) from table_name
    这样sql语句会报错,必须写成:
    select name,sum(point) from table_name GROUP BY name

  2. HAVING
    把 HAVING 加入 SQL 的原因是,WHERE 无法应用于合计函数,而如果没有 HAVING,就无法测试结果条件。
    select name,sum(point)
    from table_name GROUP BY name
    HAVING sum(point)>1000

  3. having通常和group by联合使用.

参考连接:GROUP BY和HAVING

join

       有些情况下,可以使用连接来替代子查询。因为使用join,MySQL不需要在内存中创建临时表。

select * from dept, emp where dept.deptno=emp.deptno; //简单处理方式

select * from dept left join emp on dept.deptno=emp.deptno; //左外连接,效果更佳!

参考这篇博客:mysql三种连接查询总结和性能分析

exists

参考这篇博文:exists用法

拓展

这里放几个别人整理好的sql优化,从细节上我们要把握。

  1. 优化sql查询
  1. sql优化常用的30的技巧

选择合适的存储引擎

  1. myisam 存储: 如果表对事务要求不高,同时是以查询和添加为主的,我们考虑使用myisam存储引擎. ,比如 bbs 中的 发帖表,回复表。(要定期碎片整理,因为删除了数据,MYD文件不会变小,整理可用optimize table XXX)。

  2. INNODB 存储: 对事务要求高,保存的数据都是重要数据,我们建议使用INNODB,比如订单表,账号表.

  1. Memory 存储,比如我们数据变化频繁,不需要入库,同时又频繁的查询和修改,我们考虑使用memory, 速度极快. 重启mysql就没有了。。。没有持久化机制,不像redis。

区别

       下面从几个方面来比较几个存储引擎。

字段类型

       mysql字段类型选择

分表分区

       分水平分表和垂直分表。5.1版本之后才用分区。

       mysql分表分区详解

读写分离、负载均衡、主从复制

       这些我们在以后分布式系统构建中在深入学习。

小结

       这里我们就分项的讲诉了许多的优化策略和原理方法,当然并不是全部。要记住这些方法,随时使用。可以参考这篇博文:mysql优化详解

说明

       文中出现的图片,文字描述有些来自互联网,但是出处无法考究,如果侵犯您的相关权益,请联系我,核实后我会马上加上转载说明。谢谢!!!