MYSQL5

  • JOIN 连接
  • 外连接查询
  • 内连接查询
  • 左链接查询
  • 索引
  • 创建联合索引
  • 数据库项目的优化地方
  • 记录慢查询日志和 慢查询时间


建立了三个表

in索引 mysql where mysql inner join 索引_数据库


in索引 mysql where mysql inner join 索引_in索引 mysql where_02


一对一连接:

将一个表的主键插入到另外一个表里

一对多连接:

要创建中间表

JOIN 连接

JOIN 按照功能大致分为如下三类:

INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。

LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。

RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

in索引 mysql where mysql inner join 索引_sql_03

in索引 mysql where mysql inner join 索引_主键_04

外连接查询

带in的子查询:(查找买过东西的人的信息 通过订单中的orderid查询)

in索引 mysql where mysql inner join 索引_主键_05

内连接查询

查找买过东西的用户的信息

in索引 mysql where mysql inner join 索引_数据库_06


小表是整表的搜索 用小表的id去大表里查询 不用产生存储临时数据的中间表(a,b是别名)

建索引给大表 用小表id去大表里找

左链接查询

查右边的表没有的左边的数据

查没有买过东西的用户的信息

in索引 mysql where mysql inner join 索引_数据库_07

in索引 mysql where mysql inner join 索引_主键_08

索引

in索引 mysql where mysql inner join 索引_数据库_09

B+树即排序的树

主键默认就建索引

in索引 mysql where mysql inner join 索引_数据库_10

上图中--------

给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后面最好指定自己要搜索的东西 不然写*的话就得输出全部信息就得回到主键索引树上

创建联合索引

in索引 mysql where mysql inner join 索引_主键_11

create index name age index on user(name,age); 联合索引树放name age 和主键id

select *from user where age =18

这句用不到联合索引 因为联合索引先找第一个字段name 而这句找的age

数据库项目的优化地方

用explain 查看代码中操作比较慢的地方

创建的多列联合索引在用到的时候注意会先找第一个字段

有过滤条件 还有分组 一定要建立联合索引

设置合理的慢查询时间,查看慢查询日志中执行得慢的代码 对其进行优化

in索引 mysql where mysql inner join 索引_mysql_12

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的索引,查询两次 然后把这两次查询联合起来

在建表的时候建索引:

in索引 mysql where mysql inner join 索引_sql_13

给已经建好的表建索引以及删除索引:

in索引 mysql where mysql inner join 索引_in索引 mysql where_14


查看我建好的索引的话需要具体到建的键 比如给name建了索引 需要用where定位到name=’’

可以看到主键已经加到了age上

in索引 mysql where mysql inner join 索引_数据库_15

记录慢查询日志和 慢查询时间

in索引 mysql where mysql inner join 索引_主键_16

  • explain+SQL语句 查看SQL语句的执行计划
  • 两个表(A表和B表)的联合查询SQL语句,小表决定查询次数,大表决定查询时间
  • 索引以 磁盘文件的方式 进行存储
  • 使用索引–》 从磁盘文件读取索引文件(磁盘I/O的次数 越少越好) 把索引文件里面的数据读取到内存上,进行组织