一、数据库类型:

二、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的该功能没有打开,需要自己手动启动。
网友评论