1 MySql逻辑架构
1.1 MySql逻辑架构图
1.2 总体分层
1.3 逻辑架构组成
1.4 MySql分层的好处
2 MySql存储引擎
2.1 Mysql存储引擎的概念
2.2 查看存储引擎及当前使用的存储引擎
show engines;
show variables like '%storage_engine%';
2.3 MyISAM 和 InnoDB的区别
3 SQL编写顺序和读取顺序
JOIN表名是指 要进行左连接还是右连接,即要展示那张表的数据
4 JOIN连接
4.1 示例表数据
DROP TABLE IF EXISTS `department`;
CREATE TABLE `department` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`deptName` varchar(30) DEFAULT NULL,
`address` varchar(40) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
INSERT INTO `department` VALUES ('1', '研发部(RD)', '2层');
INSERT INTO `department` VALUES ('2', '人事部(HR)', '3层');
INSERT INTO `department` VALUES ('3', '市场部(MK)', '4层');
INSERT INTO `department` VALUES ('4', '后勤部(MIS)', '5层');
INSERT INTO `department` VALUES ('5', '财务部(FD)', '6层');
DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`dep_id` int(11) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`salary` decimal(10,2) DEFAULT NULL,
`cus_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=109 DEFAULT CHARSET=utf8;
INSERT INTO `employee` VALUES ('1', '鲁班', '1', '10', '1000.00', '1');
INSERT INTO `employee` VALUES ('2', '后裔', '1', '20', '2000.00', '1');
INSERT INTO `employee` VALUES ('3', '孙尚香', '1', '20', '2500.00', '1');
INSERT INTO `employee` VALUES ('4', '凯', '4', '20', '3000.00', '1');
INSERT INTO `employee` VALUES ('5', '典韦', '4', '40', '3500.00', '2');
INSERT INTO `employee` VALUES ('6', '貂蝉', '6', '20', '5000.00', '1');
INSERT INTO `employee` VALUES ('7', '孙膑', '6', '50', '5000.00', '1');
INSERT INTO `employee` VALUES ('8', '蔡文姬', '30', '35', '4000.00', '1');
4.2 内连接
SELECT * FROM EMPLOYEE E INNER JOIN DEPARTMENT D ON E.DEP_ID = D.ID;
4.3 左连接
SELECT * FROM EMPLOYEE E LEFT JOIN DEPARTMENT D ON E.DEP_ID = D.ID;
4.4 右连接
4.4 查询左右表独有数据
SELECT * FROM EMPLOYEE E LEFT JOIN DEPARTMENT D ON E.DEP_ID = D.ID
WHERE D.ID IS NULL
SELECT * FROM EMPLOYEE E RIGHT JOIN DEPARTMENT D ON E.DEP_ID = D.ID
WHERE E.DEP_ID IS NULL
4.5 全连接
4.6 查询左右表各自独有的数据
5 SQL性能下降的原因
6 索引
6.1 索引概述
6.2 索引为什么能快速查找数据
6.3 二分搜索树
二分搜索树不作为索引底层数据结构的原因:
1、数据量很大,查找也比较费时间
2、当插入时,按照一定顺序插入,会退化为链表
6.4 B-Tree树
6.5 B+Tree树
6.9 创建\查看\删除\更改索引
一千万条数据创建索引的优化效果:
1、没有创建索引,使用非主键字段查询,耗时9秒
2、给该字段添加索引,构建索引耗时 35 秒(一般在创建表的时候就会指定索引)
3、再次使用该字段进行查询 0.78秒