美文网首页
MySQL学习笔记

MySQL学习笔记

作者: KlingelModerat | 来源:发表于2019-04-12 17:01 被阅读0次

一、数据库类型:


二、SQL语法:

where:

比较运算符     >  <  <=   >=   =  <>    大于、小于、大于(小于)等于、不等于

 BETWEEN  ...AND... 显示在某一区间的值(含头含尾)

 IN(set) 显示在in列表中的值,例:in(100,200)

 LIKE ‘张_’模糊查询,Like语句中,% 代表零个或多个任意字符,_ 代表一个字符,例first_name like ‘_a%’;

 IS NULL 判断是否为空

逻辑运算符and多个条件同时成立

 or多个条件任一成立

 not不成立,例:where not(salary>100);

oreder by:

ASC(升序) DESC(降序)

1.查询所有的商品,按价格进行排序.(asc-升序,desc-降序)

  select * from product order by price;

2.查询名称有新的商品的信息并且按价格降序排序.

   select * from product where pname like '%新%' order by price desc;

聚合函数:

特点:只对单列进行操作

常用的聚合函数: 

sum():求某一列的和

avg()求某一列的平均值

max()求某一列的最大值

min()求某一列的最小值

count()求某一列的元素个数

 select sum(price) from product;

分组:

GROUP BY

HAVING

例:

1.根据cno字段分组,分组后统计商品的个数.  select cid,count(*) from product group by cid;

2.根据cno分组,分组统计每组商品的平均价格,并且平均价格> 60;  select cid,avg(price) from product group by cid having avg(price)>60;

注意事项:

1.select语句中的列(非聚合函数列),必须出现在group by子句中

2.group by子句中的列,不一定要出现在select语句中

3.聚合函数只能出现select语句中或者having语句中,一定不能出现在where语句中。

union 集合的并集(不包含重复记录)

unionall集合的并集(包含重复记录)


SQL查询之语法顺序和执行顺序:

MySQL查询语法顺序1.SELECT  2.FROM  3.LEFT JOIN  4.ON  5.WHERE  6.GROUP BY  7.HAVING  8.ORDER BY  9.LIMIT

 示例:SELECT * FROM user LEFT JOIN order ON user.id = order.uid WHERE order.price > 1000 GROUP BY user.name HAVING count(1) > 5 ORDER BY user.name LIMIT 0,10

执行顺序:1.FROM(将最近的两张表,进行笛卡尔积)---VT1

2.ON(将VT1按照它的条件进行过滤)---VT2

3.LEFT JOIN(保留左表的记录)---VT3

4.WHERE(过滤VT3中的记录)--VT4…VTn

5.GROUP BY(对VT4的记录进行分组)---VT5

6.HAVING(对VT5中的记录进行过滤)---VT6

7.SELECT(对VT6中的记录,选取指定的列)--VT7

8.ORDER BY(对VT7的记录进行排序)--游标

9.LIMIT(对排序之后的值进行分页)

WHERE条件执行顺序(影响性能)

1.MYSQL:从左往右去执行WHERE条件的。

2.Oracle:从右往左去执行WHERE条件的。

结论:写WHERE条件的时候,优先级高的部分要去编写过滤力度最大的条件语句。


MySQL 5.5之后,默认的存储引擎由MyISAM变为InnoDB

MySQL通过日志记录了数据库操作信息和错误信息。常用的日志文件包括错误日志、二进制日志、查询日志、慢查询日志和InnoDB 引擎在线 Redo 日志中继日志

索引:

索引是在存储引擎中实现的,也就是说不同的存储引擎,会使用不同的索引

MyISAM和InnoDB存储引擎:只支持BTREE索引, 也就是说默认使用BTREE,不能够更换 *  MEMORY/HEAP存储引擎:支持HASH和BTREE索引

索引的分类

单列索引:

普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。

唯一索引:索引列中的值必须是唯一的,但是允许为空值,

主键索引:是一种特殊的唯一索引,不允许有空值。

组合索引:在表中的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合。

全文索引:只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引。

空间索引:不做介绍,一般使用不到。

尽量创建组合索引(组合索引其实会默认按照最左前缀原则帮我们创建多组索引)组合索引(id,name,sex)

索引最左前缀原则

索引覆盖:要查询的列,也要使用索引覆盖住


MySQL性能优化之查看执行计划explain

EXPLAIN 命令用法, 在 SELECT 语句前加上 explain

expain出来的信息有10列,分别是id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra,下面对这些字段进行解释:

id: SELECT 查询的标识符. 每个 SELECT 都会自动分配一个唯一的标识符.

select_type: SELECT 查询的类型.

table: 查询的是哪个表

partitions: 匹配的分区

type: join 类型

possible_keys: 此次查询中可能选用的索引

key: 此次查询中确切使用到的索引.

ref: 哪个字段或常数与 key 一起被使用

rows: 显示此查询一共扫描了多少行. 这个是一个估计值.

filtered: 表示此查询条件所过滤的数据的百分比

extra: 额外的信息


type列说明

通常来说, 不同的 type 类型的性能关系如下:

ALL < index < range ~ index_merge < ref < eq_ref < const < system

MySQL性能优化之慢查询:

MySQL 数据库有一个“慢查询日志”功能,用来记录查询时间超过某个设定值的SQL,这将极大程度帮助我们快速定位到症结所在,以便对症下药。

至于查询时间的多少才算慢,每个项目、业务都有不同的要求。传统企业的软件允许查询时间高于某个值,但是把这个标准放在互联网项目或者访问量大的网站上,估计就是一个bug,甚至可能升级为一个功能性缺陷。MySQL的慢查询日志功能,默认是关闭的,需要手动开启


MySQL性能分析语句show profile:

Query Profiler是MYSQL自带的一种query诊断分析工具,通过它可以分析出一条SQL语句的性能瓶颈在什么地方。

通常我们是使用的explain,以及slow query log都无法做到精确分析,但是Query Profiler却可以定位出一条SQL语句执行的各种资源消耗情况,比如CPU,IO等,以及该SQL执行所耗费的时间等。不过该工具只有在MYSQL 5.0.37以及以上版本中才有实现。默认的情况下,MYSQL的该功能没有打开,需要自己手动启动。


相关文章

网友评论

      本文标题:MySQL学习笔记

      本文链接:https://www.haomeiwen.com/subject/oslqwqtx.html