在项目中,有一个in查询效率很低,耗时大概10多秒,修改后为1秒左右,本来想造一组数据展现效果的,发现实际情况比较复杂,跟具体的关联数据类型、列是否有索引等相关,实际情况并不是某种查询就肯定比另一种查询效率高。在此不再费心思造数据,仅列出几种可能的查询方法,以备需要时尝试。

1. in查询实现

select * from product

where id in (select rela_id from product_rela where id = '1');

2. 给in查询包一层temp

select * from product

where id in (select rela_id from (select rela_id from product_rela where id = '1') as temp);

这种方法与普通的in查询相比,只是给in的子查询包装了一层select xxx from( ... )as temp,看似没做什么,但我在项目中通过此方法确实提高了查询效率,具体原理有待进一步考证。

3. 使用exists查询代替in查询

select * from product a

where EXISTS (select rela_id from product_rela b where a.id=b.rela_id and b.id = '1');

4. 将in查询改为连接查询

select * from product a

INNER JOIN product_rela b

on a.id= b.rela_id and b.id='1';

mysql中 并不是exists一定比in效率快

一、关于exists和in的效率问题:

分场景:

1.此场景适应A表数据量大于B表,且where后的字段加了索引。这种情况用in效率高的原因是利用了大表的索引。

select * from ecs_goods A where A.cat_id in(select cat_id from ecs_category B);

-------------------------------------------------------------------------------

2.此场景适应B表数据量大于A表,且where后的字段加了索引。这种情况用exists效率高的原因是利用了大表的索引。

select * from ecs_goods a where EXISTS(select cat_id from

ecs_category b where a.cat_id = b.cat_id);

总结:IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。

mysql in查询效率真的低_MySql中in查询效率低的替代方法相关推荐

  1. mysql中查询本月销售记录_mysql之select查询:练习

    单表查询: 数据查询命令:select 识别要查询的列 from识别要查询的表 select 运算符: + .-.*./. 加减乘除 等于= 不等于!= 或 <> 大于等于>= 小于 ...

  2. mysql 查询语句属性值_MySQL学习——SQL查询语句(一)

    查询数据是指从数据库中获取所需要的数据,查询数据是数据库操作中最常用也是最重要的操作,用户可以根据对数据的需求,使用不同的查询方式,通过不同的查询方式可以获得不同的数据,在MySQL中使用select ...

  3. mysql子查询走索引吗_MySQL中in子查询会导致无法使用索引问题(转)

    MySQL的测试环境 测试表如下 create tabletest_table2 ( idint auto_increment primary key, pay_idint, pay_timedate ...

  4. mysql多表查询连接的种类_MySQL中基本的多表连接查询教程

    一.多表连接类型1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如: 由于其返回的结果为被连接的两个数据表的乘积,因此当有WHERE ...

  5. php mysql 时间戳查询_mysql中时间查询函数(包括时间戳)

    mysql中时间查询函数(包括时间戳) 这些函数都是MySQL自带的,可以直接使用在PHP写的MySQL查询语句中哦 1-CURDATE()或CURRENT_DATE()和CURTIME()或CURR ...

  6. mysql中常见查询表_MySQL中常见查询

    1 --1.查询"001"课程比"002"课程成绩高的所有学生的学号: 2 SELECT a.s FROM sc a,sc b WHERE a.s=b.s AN ...

  7. mysql 查询 唯一_Mysql中如何查询所有唯一记录

    Mysql中如何查询所有唯一记录? 今天刚下班时看到网上有人问了一个mysql问题,关于如何在mysql中查询出所有不重复的记录,搞了很长时间才写了条,算是学习一下吧,自己对mysql也不是很了解.下 ...

  8. mysql最近24小时数据_mysql中如何查询最近24小时、top n查询

    MySQL中如何查询最近24小时. where visittime >= NOW() - interval 1 hour; 昨天. where visittime between CURDATE ...

  9. mysql 怎么查询慢sql语句_Mysql中 查询慢的 Sql语句的记录查找

    Mysql中 查询慢的 Sql语句的记录查找 慢查询日志 slow_query_log,是用来记录查询比较慢的sql语句,通过查询日志来查找哪条sql语句比较慢,这样可以对比较慢的sql可以进行优化. ...

  10. 如何在mysql查询结果集中得到记录行号_MySQL中在查询结果集中得到记录行号的方法...

    如果需要在查询语句返回的列中包含一列表示该条记录在整个结果集中的行号, ISO SQL:2003 标准提出的方法是提供 ROW_NUMBER() / RANK() 函数. Oracle 中可以使用标准 ...

最新文章

  1. 改变shell read命令的隔符
  2. 对时间序列分类的LSTM全卷积网络的见解
  3. Camera开发系列之六-使用mina框架实现视频推流
  4. php的安装配置,PHP 安装/配置
  5. Flink从入门到精通100篇(十九)-基于 Flink 的大规模准实时数据分析平台的建设实践
  6. 自定义View之onMeasure()
  7. 利用DBMS_FILE_TRANSFER传输数据库文件
  8. 理解几个网络硬件(调制解调器、路由器、交换机)的基本作用
  9. C++ template —— 动多态与静多态(六)
  10. LINUX-iostat命令讲解
  11. 华为中兴FPGA面试题总结
  12. 中医电脑cac处方系统 最好的杀毒软件
  13. Linux操作命令提示符
  14. 用电脑计算器计算以2为底的对数
  15. CH Dream(侠客行)
  16. Android手机Root授权原理细节全解析
  17. DMSP/OLS夜间灯光遥感影像数据概述
  18. FLIP:Scaling Language-Image Pre-training via Masking
  19. 唯品会关键字搜索商品API接口(item_search-按关键字搜索唯品会商品API接口),唯品会API接口
  20. linux打开xml文件,查看 XML 文件

热门文章

  1. SIM868模块+Arduino将位置信息上传到服务器
  2. c语言银行卡六位密码编译,6位随机密码生成器
  3. 谷歌浏览器利用开发者工具截取长图
  4. docker装LibreELEC_J3455安装PVE折腾记录(直通GPU至Libreelec当HTPC+黑群+OMV)20190703更新简易版...
  5. 编译LibreELEC.tv,报错: ld -lz can not find -lz,原来是zlib-1.2.11没有交叉编译
  6. Matlab2017b安装教程及破解失败方法
  7. 对Linux下使用C++读写word文件的技术方案比较
  8. win10卓越性能模式
  9. 数学也荒唐:20个脑洞大开的数学趣题
  10. 计算机组装流程,电脑组装教程