没有合适的资源?快使用搜索试试~ 我知道了~
【mysql知识点整理】 — 准确理解 in 和 exists
2 下载量 95 浏览量
2020-12-14
18:12:41
上传
评论
收藏 525KB PDF 举报
温馨提示
试读
4页
文章目录测试数据介绍1 inin后面数据量过大不走索引? —> 假的1.2 in查询时,索引使用情况分析1.3 in查询建议 — java开发尽量不使用in2 exists2.1 索引使用情况 — 覆盖索引很重要3 exists适用于外表小,内表大的情况,in与之相反??? — 正确 绝知此事要躬行!!! 测试数据介绍 -- 表t1,只有主键索引,数据量为百万级 CREATE TABLE `t1` ( `id` int(10) NOT NULL AUTO_INCREMENT, `t1_col` varchar(100) DEFAULT NULL, `t1_col2` v
资源详情
资源评论
资源推荐
【【mysql知识点整理】知识点整理】 — 准确理解准确理解 in 和和 exists
文章目录文章目录测试数据介绍1 inin后面数据量过大不走索引? —> 假的1.2 in查询时,索引使用情况分析1.3 in查询建议 — java开发尽量不使用in2 exists2.1 索引使用情况 — 覆盖索引很重
要3 exists适用于外表小,内表大的情况,in与之相反??? — 正确
绝知此事要躬行!!!
测试数据介绍测试数据介绍
-- 表表t1,只有主键索引,数据量为百万级,只有主键索引,数据量为百万级
CREATE TABLE `t1` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`t1_col` varchar(100) DEFAULT NULL,
`t1_col2` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_t1_col` (`t1_col`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 表4 有主键索引和非主键索引 , 数据量为10万级
CREATE TABLE `t4` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`t4_col` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_t4_col` (`t4_col`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- t1,t4表数据插入
DROP PROCEDURE IF EXISTS my_insert;
CREATE PROCEDURE my_insert()
-- 定义存储过程
BEGIN
DECLARE m,n int DEFAULT 0;
loopname1:LOOP
INSERT INTO t1(t1_col,t1_col2) VALUES(CONCAT('t1_',FLOOR(1+RAND()*1000)),CONCAT('t11_',FLOOR(1+RAND()*1000)));
SET n=n+1;
IF n=1000000 THEN
LEAVE loopname1;
END IF;
END LOOP loopname1;
loopname2:LOOP
INSERT INTO t4(t4_col) VALUES(CONCAT('t4_',FLOOR(1+RAND()*1000)));
SET m=m+1;
IF m=100000 THEN
LEAVE loopname2;
END IF;
END LOOP loopname2;
END;
-- 执行存储过程
CALL my_insert();
1 in
in后面数据量过大不走索引后面数据量过大不走索引? —> 假的假的
explain select * from t4 where t4.id in (select id from t1);
explain select * from t1 where t1.id in (select id from t4);
从上图可以看到in后面的数据量过大,仍然会走索引。
但是这并不能说明问题,为什么呢? —> 这里复习一下执行计划的知识:
从上面的查询语句来看,按说第一个查询语句应该先查询t1表,但是通过执行计划可以看到它先查了t4 (看id列)
第2个查询语句倒是按照我们写的sql来了,但是还有一个问题 —> 就是按照我们的查询语句,其实in里面的结果应该是一张临时表,但上面的执行计划为什么只有两条???
有了上面的疑惑,一想肯定就能想到: mysql优化器肯定对上面的语句进行了优化,优化成什么了呢?我觉得一般人其实都是可以猜到的☺☺☺ ,这里咱直接用show warnings;命令看
一下,人家到底优化成了什么:
weixin_38500944
- 粉丝: 7
- 资源: 943
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0