全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

mysql中in大量数据导致查询速度慢怎么优化?

发布时间:2023-10-11 22:53:49
发布人:xqq

一、mysql中in大量数据导致查询速度慢怎么优化

拆分sql语句

mysql中in大量数据导致查询速度慢,优化的名列前茅种方案是拆分sql子查询,将一条sql拆为两条sql,将in内部的sql拆分出来,取出isbn集合列表,然后利用mybatis的sql拼接的功能,拼成完整的sql语句。

Xml代码如下所示,名列前茅步首先利用时间参数分页取出isbn列表

第二步先在服务层中判断上一轮取出的isbn列表是否为空,如果不为空继续向下执行,如果isbn集合列表不为空,继续利用mybatis提供的xml动态标签功能,拼接出in查询条件

联结代替子查询

这种方案原理还是避免子查询,将子查询语句改写为联结查询,改写后的sql语句如下所示

SELECT

    t1.isbn,

    code

FROM

    tb_book_main t1

    INNER JOIN

    ( SELECT isbn FROM tb_book_base WHERE publish_time BETWEEN 20190903 AND 20191003 ) t2

on t1.isbn = t2.isbn

AND role= 100

limit 0,10

使用explain查看索引命中情况,mysql按照预期命中了tb_book_base的publish_time和tb_book_main的isbn索引

延伸阅读:

二、什么是Memory引擎

Memory引擎是Mysql的内存引擎,在实现上,Memory存储引擎不同于Innodb这种组织索引结构(索引即是数据,即数据存放在主键索引上),而是将索引和数据分开存储。索引采用Hash的形式,存放主键id和指向数据的指针,而数据则按插入顺序存放。我们称这种数据组织方式为堆组织方式。

#it技术干货

相关文章

怎样在MySQL表中存储树形结构数据?

怎样在MySQL表中存储树形结构数据?

2023-10-11
redis似乎并没有“事务”,那些用到“事务”的人在做什么?

redis似乎并没有“事务”,那些用到“事务”的人在做什么?

2023-10-11
mysql inner join为什么不走索引?

mysql inner join为什么不走索引?

2023-10-11
mysql的MEMORY引擎为什么没有redis的应用广泛?

mysql的MEMORY引擎为什么没有redis的应用广泛?

2023-10-11

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取