相信大家 MySQL 都用了很久了,各种 join 查询天天都在写,但是 join 查询到底是怎么查的,怎么写才是最正确的,今天我就和大家一起学习探讨一下
假设有两张表 t1、t2,两张表都存在有主键索引 id 和索引字段 a,b 字段无索引,然后在 t1 表中插入 100 行数据,t2 表中插入 1000 行数据进行实验
- CREATE TABLE `t2` (
- `id` int NOT NULL,
- `a` int DEFAULT NULL,
- `b` int DEFAULT NULL,
- PRIMARY KEY (`id`),
- KEY `t2_a_index` (`a`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
- CREATE PROCEDURE **idata**()
- BEGIN
- DECLARE i INT;
- SET i = 1;
- WHILE (i <= 1000)do
- INSERT INTO t2 VALUES (i,i,i);
- SET i = i +1;
- END WHILE;
- END;
- CALL **idata**();
- CREATE TABLE t1 LIKE t2;
- INSERT INTO t1 (SELECT * FROM t2 WHERE id <= 100);
- 复制代码
我们使用查询 SELECT * FROM t1 STRAIGHT_JOIN t2 ON (t1.a=t2.a);因为 join 查询 MYSQL 优化器不一定能按照我们的意愿去执行,所以为