MYSQL5
- JOIN 连接
- 外连接查询
- 内连接查询
- 左链接查询
- 索引
- 创建联合索引
- 数据库项目的优化地方
- 记录慢查询日志和 慢查询时间
建立了三个表
一对一连接:
将一个表的主键插入到另外一个表里
一对多连接:
要创建中间表
JOIN 连接
JOIN 按照功能大致分为如下三类:
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
外连接查询
带in的子查询:(查找买过东西的人的信息 通过订单中的orderid查询)
内连接查询
查找买过东西的用户的信息
小表是整表的搜索 用小表的id去大表里查询 不用产生存储临时数据的中间表(a,b是别名)
建索引给大表 用小表id去大表里找
左链接查询
查右边的表没有的左边的数据
查没有买过东西的用户的信息
索引
B+树即排序的树
主键默认就建索引
上图中--------
给name字段添加索引后:
- 主键索引树 放的是所有的值
- 辅助索引树放的是当前的索引+主键id
对于select name,id from user where name=‘wang’;
不用回到主键索引树
对于select name,id,age from user where name='wang';
要搜age得去主键索引树上找 因为name的辅助索引树只存了name和主键id 并没有存储age
所以select后面最好指定自己要搜索的东西 不然写*的话就得输出全部信息就得回到主键索引树上
创建联合索引
create index name age index on user(name,age);
联合索引树放name age 和主键id
select *from user where age =18
这句用不到联合索引 因为联合索引先找第一个字段name 而这句找的age
数据库项目的优化地方
用explain 查看代码中操作比较慢的地方
创建的多列联合索引在用到的时候注意会先找第一个字段
有过滤条件 还有分组 一定要建立联合索引
设置合理的慢查询时间,查看慢查询日志中执行得慢的代码 对其进行优化
select *from user where a=3 or b=4;
可能会直接整表查找 但是也会被MySQL Server优化
select *from user where a=3 union select *from user where b=4;
第一次查询a的索引,第二次查询b的索引,查询两次 然后把这两次查询联合起来
在建表的时候建索引:
给已经建好的表建索引以及删除索引:
查看我建好的索引的话需要具体到建的键 比如给name建了索引 需要用where定位到name=’’
可以看到主键已经加到了age上
记录慢查询日志和 慢查询时间
- explain+SQL语句 查看SQL语句的执行计划
- 两个表(A表和B表)的联合查询SQL语句,小表决定查询次数,大表决定查询时间
- 索引以 磁盘文件的方式 进行存储
- 使用索引–》 从磁盘文件读取索引文件(磁盘I/O的次数 越少越好) 把索引文件里面的数据读取到内存上,进行组织