[推荐] [求证&散分]MySQL 中 where id in (1,2,3,4,...) 的效率问题讨论 [问题点数:300分,结帖人ACMAIN_CHM]

Bbs1
本版专家分:45
Bbs1
本版专家分:0
Bbs5
本版专家分:4762
Blank
蓝花 2009年10月 PHP大版内专家分月排行榜第三
Bbs6
本版专家分:5812
Blank
黄花 2009年9月 其他数据库开发大版内专家分月排行榜第二
Bbs4
本版专家分:1170
Bbs1
本版专家分:0
Bbs7
本版专家分:20977
Blank
黄花 2017年4月 其他数据库开发大版内专家分月排行榜第二
Blank
蓝花 2008年11月 VB大版内专家分月排行榜第三
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:16
Bbs1
本版专家分:0
Bbs2
本版专家分:360
vga
Bbs1
本版专家分:27
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:71
版主
Blank
优秀版主 2015年8月优秀小版主
Blank
红花 2012年2月 PHP大版内专家分月排行榜第一
2012年1月 PHP大版内专家分月排行榜第一
2011年11月 PHP大版内专家分月排行榜第一
2011年9月 PHP大版内专家分月排行榜第一
Blank
黄花 2012年3月 PHP大版内专家分月排行榜第二
2011年12月 PHP大版内专家分月排行榜第二
2011年10月 PHP大版内专家分月排行榜第二
Blank
蓝花 2013年2月 PHP大版内专家分月排行榜第三
2012年9月 PHP大版内专家分月排行榜第三
2012年7月 PHP大版内专家分月排行榜第三
2012年5月 PHP大版内专家分月排行榜第三
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs2
本版专家分:266
Bbs1
本版专家分:0
Bbs1
本版专家分:5
Bbs1
本版专家分:0
jpa的in查询
jpa 中 in 语句的写法 一) in (List)     @Modifying     @Query("DELETE FROM Height h WHERE h.user.id = ?1 AND h.id in (?2)")     public void deleteHeightInBatchByUserIdAndIdIn(Long uid, List hids);
JPA where in查询的问题
我的业务场景是这样的,我有一个流程节点,有对应的状态 节点1,状态1,状态2,状态3 节点2,状态4 ... 所以,我们的ql = "select e from Entity e where e.st
MySQL中in和=的区别
今天碰到一个关于数据库查询的性能问题,平常加一句索引也就过去了,今天多说两句。 前置条件:MYSQL数据库,uid是主键,login_name未建任何索引, T_USER表中数据有8451条; 分别执行下列两句SQL 1)  SELECT * FROM T_USER WHERE uid IN (SELECT MIN(uid) FROM T_USER WHERE login_name =#{l
警惕 MySql 更新 sql 的 WHERE 从句中的 IN() 子查询时出现的性能陷阱
mer_stage 表有 216423 条记录,DDL:CREATE TABLE `mer_stage` ( `STAGE_ID` int(11) NOT NULL AUTO_INCREMENT, `MER_ID` int(11) NOT NULL, `MER_CODE` varchar(16) DEFAULT NULL, `MER_NAME` varchar(80) NOT NU
delete from table where id in(数万条记录)
刚从数据库中 delete from table where id in(1,2,3,4) 没问题,速度很快但是一旦加上子查询 如delete from table where id in(select id from table2)  就非常慢,有时候跑了一整天都没动静,最后搜索查询了下  in子查询这个样的语句在mysql5.6之前一直是禁止使用的 效率极差 改成表连接的方式采用如下方式即可:...
where id in (...)
我想做一个查询,可以查询多条记录。 类似于这样: select * from tblA where id in ('00001','00003','00008') 我给用户了一个文本框,并给了用户在输
select *... where id in (select 字符串 from ... )问题?
字符串的内容是另一张表的字符型字段abc,内容为:3427,3432 select * A where id in (select abc from B ) 执行以上语句,mssql会提示: 在将 n
Mysql SET(集合类型) 数据类型
SET(集合类型) SET是一个字符串对象,可以有零或多个值,其值来自表创建时规定的允许的一列值。指定包括多个SET成员的SET列值时各成员之间用逗号(‘,’)间隔开。这样SET成员值本身不能包含逗号。set的容纳范围为64个不同的成员..set其实和枚举差不多,set指定了一个集合范围,在我们插入数据的时候,需要插入在set范围之内的元素,如果插入了未被包含的元素,那么就会发出警告..CREAT...
MySQL 存储过程或者函数中传参数实现where id in(1,2,3,...)IN条件拼接
正常写法: select * from table_name t where t.field1 in (1,2,3,4,...); 当在写存储过程in里面的列表用个传入参数代入的时候,就需要用到如下方式: 主要用到find_in_set函数 select * from table_name t where find_in_set(t.field1,'1,2,3,4'); 当然还可以比较笨
select * from a as a where a.id in (1,2,3,...,100)效率如何
select * from a as a where a.id in (1,2,3,...,100)效率如何 in里面的东西是没有规律的 是从另一个表按条件select出来的 是单这么写效率好,还是s
Where条件的in里面放太多数据导致很慢
比如:select * from TableA where ID in (42,216,219,230,231,220,249,250,221,251,252,217,253,255,256,254,257,258,1804) 52W数据,查询速度19386ms,好慢怎么办?程序都卡死了。   那么试一下百度搜索到的优化方式? 1.将in里面的ID分拆查询,再合并数据 select
select * from table where intId in(这里varchar型的'1,2,3,4')怎么才能执行?
代码如下: 1 declare @aaa varchar(100) 2 set @aaa='13,15,16,17,18,19' 3 select * from clubMasterclub wher
select * form table where Id in (数组的问题)
如题语句,三层架构,需要在 (@Ids)内传入一个数组 , 实现的功能就是 判断哪些行被选中,然后把选中行的ID加入到数组中,然后用sql查询出对应的数据 UI 层 private void Prin
select * A where id in (select 字符型 from B ),怎样才能执行?
字符串的内容是另一张表的字符型字段abc,内容为:3427,3432 select * A where id in (select abc from B ) 执行以上语句,mssql会提示: 在将 n
select * from sample where id = id
今天写sql语句的时候无意中,写成了如题的语句,结果可想而知,和我的预期产生了很大的差别,把数据库全查了,再一想很合理。结合前几天看“继承者们”时候用url跳转电视剧的情况,这是当时的url----https://pan.baidu.com/play/video#video/path=%2F继承者们%2F14.mkv&t=-1。这个14就是继承者们的集数,直接改变14为15,这个url可以进入到百
MySQL的in查询效率太低的解决办法之一与其它优化示例
最近在做一个MySQL数据库的查询(查询出指定时间之后凡是上传过图片的用户所在的镇和镇的管理员名),查询语句如下: SELECTDISTINCTuser_name,town_nameFROMt_farmersWHEREidIN (SELECTDISTINCTfarmer_idFROMt_farmers_imagesWHEREcreate_time>='2...
mysql where 语句优化
where语句:   1.      在查询中先读取所有常量表,常量表包含一下两种类型:①空表或者只有一条记录的表②where查询的条件为表的主键或者唯一索引,有索引的列与常量比较并且是非空2.       join查询如果 ORDER BY和GROUP BY子句来自同一个表,那么在查询时首先选择该表。3.    如果有一个ORDER BY子句和一个不同的GROUP BY子句,或者如果 ORDER...
mysql in 查询效率慢优化
mysql> select * from abc_number_prop where number_id in (select number_id from abc_number_phone where phone = '82306839'); 为了节省篇幅,省略了输出内容,下同。 67 rows in set (12.00 sec) 只有67行数据返回,却花了12秒,而系统中可能同
mysql中or和in的效率问题
在网上一直看到的是or和in的效率没啥区别,一直也感觉是这样,前几天刚好在看《mysql数据库开发的36条军规》的文章,里面提到了or和in的效率问题,文中提到or的效率为O(n),而in的效率为O(logn), 当n越大的时候效率相差越明显。今天刚好有时间决定对心中的疑惑进行测试,下面是详细的测试过程。 第一步,创建测试表,并生成测试数据,测试数据为1000万条记录。数据库版本为5.1.6
MySql中in查询效率低的替代方法
在项目中,有一个in查询效率很低,耗时大概10多秒,修改后为1秒左右,本来想造一组数据展现效果的,发现实际情况比较复杂,跟具体的关联数据类型、列是否有索引等相关,实际情况并不是某种查询就肯定比另一种查询效率高。在此不再费心思造数据,仅列出几种可能的查询方法,以备需要时尝试。 1. in查询实现 select * from product where id in (select rela_id f...
MySql in子句 效率低下优化
背景:  更新一张表中的某些记录值,更新条件来自另一张含有200多万记录的表,效率极其低下,耗时高达几分钟。 update clear_res set candelete=0 where resid in ( select distinct resourceid from att_attentionresult where important=0 ); 耗时 365s   优化后 ...
MySql in 查询和其他查询效率对比
数据库表数据在 100万,in 匹配数据在500条左右。 匹配字段已经建立了索引。 1. select f.recordType,f.id,f.selectMonthGroup from ftms_fly_training_record f where f.selectMonthGroup in ('1970-01','1970-02','1970-03','1970-04','19...
mysql 实战 or、in与union all 的查询效率
OR、in和union all 查询效率到底哪个快。 网上很多的声音都是说union all 快于 or、in,因为or、in会导致全表扫描,他们给出了很多的实例。 但真的union all真的快于or、in?本文就是采用实际的实例来探讨到底是它们之间的效率。 1:创建表,插入数据、数据量为1千万【要不效果不明显】。 drop table if EXISTS BT; create...
mysql用in效率低?
子查询指的是一个查询是另外一个查询的条件,之间关系是用in来构建 虽然有时候用explain显示是用到索引 但是看到rows的时候就发现还是扫描了最外边表中的大多数数数据 (这种情况出现在了mysql5.5和5.6版本里边。5.7得到了优化) 看两个例子 UPDATE    task_manager    INNER JOIN      (SELECT        task
mysql exists 和 in的效率比较
这条语句适用于a表比b表大的情况 select * from ecs_goods a where cat_id in(select cat_id from ecs_category);   这条语句适用于b表比a表大的情况 select * from ecs_goods a where EXISTS(select cat_id from ecs_category b where a.cat
MySQL in和exists哪个效率高
很多人说exists的效率比in高,那我们来看看是不是是否是这样。MySQL的中的in语句是把外表和内表作hash 连接,而exists语句是对外表作loop循环,每次loop循环再对内表进行查询。先来看看这两个语句:1、select * from A where A.id in (select id from B);2、select * from A where exists (select *...
mysql中 并不是exists一定比in效率快
一、关于exists和in的效率问题: 分场景: 此场景适应A表数据量大于B表,且where后的字段加了索引。这种情况用in效率高的原因是利用了大表的索引。 1. select * from ecs_goods A where A.cat_id in(select cat_id from ecs_category B); 此场景适应B表数据量大于A表,且where后的字段加了...
mysql in子查询执行效率慢的解决方法
因为MySQL在处理子查询的时候是不够好,在有些情况下执行效率真的很慢。我在MySQL 5.1.42 和 MySQL 5.5.19 都进行了尝试,都有这个问题。 1.将in子查询改为join连接查询,速度为会明显提升,以下举例,以100条记录为例: 用in子查询测试: select 商品信息id,商品编码,商品名称,总公司售价,库存,分公司售价 FROM ( SELEC
MySQL中IN和EXISTS效率对比实验
验证:IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况环境:mysql5.7以上版本两个表分别是user(数据量小)和order(数据量大)user:400条数据order:409356条数据数据库下载链接链接:https://pan.baidu.com/s/12Pk9cr_wNjj13TjoDdCJ7Q 密码:r93e实验一:user表数据小于order表数据SQL语句SE...
mysql in 子查询 效率慢 优化(转)
使用连接(JOIN)来代替子查询(Sub-Queries) MySQL从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。例如,我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来,然后将结果传递给主查询,如下所示:  DELETE FROM c
mysql连接查询和in的效率取舍
例如: A表 id   子id    父id 1      3        2 2      5        2 3      4         3 B表 id    name 3      xxx 5       xxx 首先我要得到a表父id为2的项 在用获得的子id去查B表 连接查询:select name from A right join  B on
mysql between and 和in效率问题
在用between and 和in 进行范围查询的时候, 能用between and就尽量用,亲测了一下,between and 花费的成本比in少, 可以通过 explain format=json 执行计划, 可以清晰的看到数据query_cost explain format=json的用法 后面直接加你查询的sql就可以了
MySQL调优 ---- IN
关于 SQL 调优中经典的 IN 关键字慢查询问题, 以及调优的思考...
mysql中in的效率
select * from user where user.id in (1,2,3,4,5,6,7,8) mysql对这种语句的执行效率是很高的,他的执行分几步来实现。 第一步: 将in中的数据排序, 第二步: 将user表中的行中的id用二分法在排序后的序列中查找,这样的查找速度非常高 再来看第二种情况 select * from user where user.id i
mysql中IN,OR,BETWEEN性能比较
这里的查询条件有三种:between,or 和 in。这里id列是索引列,如果不是的话,三个查询都是全表扫描,性能差距应该不大。   1  准备环境  代码如下 复制代码 mysql> show create table tinG *************************** 1. row ***********************
mysql in与or效率比较
在网上一直看到的是or和in的效率没啥区别,一直也感觉是这样,前几天刚好在看《mysql数据库开发的36条军规》的文章,里面提到了or和in的效率问题,文中提到or的效率为O(n),而in的效率为O(logn), 当n越大的时候效率相差越明显。今天刚好有时间决定对心中的疑惑进行测试,下面是详细的测试过程。 第一步,创建测试表,并生成测试数据,测试数据为1000万条记录。数据库版本为5.1.6
mysql in和exists性能比较和使用
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。 如果查询的两个表大小相当,那么用in和exists差别不大。 如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in: 例如:表A(小表),表B(大表) 1: select * from
sql 中in的条件几百个,单表查询,有效率问题么,怎么优化,求大神们指点,
-
mysql update where uid in 太慢了 有其他办法吗
update user set refid=10086 where uid in (select b from (select uid as b from user ORDER BY uid DESC
查询多条数据where id=某字符串(例如1,2,3,4) Mysql
t_monitorsensor表我有10条数据 ID分别为1-10, 我用另一个sql语句联合查询出一个列,值为1,2,3,4,5 我想查询t_monitorsensor表中ID=这个值的数据(结果为
mysql使用delete from where in 删除时报错如何解决
数据库存在重复的垃圾数据想利用delete from where in删除,语句如下: DELETE FROM tms_daily_plan WHERE tms_daily_plan_id IN ( SELECT t.tms_daily_plan_id FROM tms_daily_plan t WHERE t.FIRST_PORT_CODE = 'PEK' AND t.ORG_STD BET...
mysql 查询优化 in 和 not in
select title.id,title.`name` from title where title.id not in (select user_tag.tagid from user_tag )   可以改为 select title.id,title.`name` from title left join user_tag on user_tag.tagid = title.id w...
MySQL 中 where id in (1,2,3,4,...) 的效率问题讨论
 MySQL ACMAIN_CHM06-26 16:36 等级 84次回复 [<em>求证</em>&amp;amp;散分]MySQL 中 where id in (1,2,3,4,...) 的效率问题讨论 庆祝本月大版得分过万,兼把在这段论坛中经常被问到的一个问题拿出来大家讨论一下。 命题假设: 测试表如下 create table t_06 ...
MySql---where---in条件过多导致的效率缓慢问题的优化方法
更新一张表中的某些记录值,更新条件来自另一张表(数据量大),效率极其低下。 update A set A.a = 0 where A.b in ( select distinct B.b from B where B.c = 0 ); 优化后 update A set A.a = 0 where A.b in ( select b from (select distinct B....
mysql的in与or哪个效率更好?
请问各位大侠,诸如下面的语句: 1. select a1 from table where a1='b1' or a1='b2' or a1='b3' or a1='b4' or a1='b5' 2.
in的效率问题
table1 ---------------------- field1 field2 field3 ... ---------------------- 主键为:field1 field2 数据量比
MySQL EXISTS /NOT EXISTS IN和NOTIN 效率比较
首先说下他们的用法in和not in 大家肯定都不陌生,用法如下SELECT * from `user` as a WHERE a.ID in(SELECT b.ID from student as b) SELECT * from `user` as a WHERE a.ID not in(SELECT b.ID from student as b)用来判断某一个字段是否存再子查询的结果集中...
mysql in的效率问题
mysql 初级入门狗 被学长们教育了一顿决定写个东西记录一下    select  *from a where id in (select id from b); 这么写sql 语法上是没问题的  但是一定会被老大骂死  这么写效率能低还到死  很容易就10几秒才跑完 原因还没研究太明白,不敢乱写 只写几个解决方案吧  1 将语句分成两个来写   把select id from b 单提
MySQL IN(............) 里面有大量数据
-
MYSQL中IN与EXISTS的区别
目录 一、IN与EXISTS的区别 1、IN查询分析 2、EXISTS查询分析 3、结论: 在MYSQL的连表查询中,最好是遵循‘小表驱动大表的原则’ 一、IN与EXISTS的区别 1、IN查询分析 SELECT   *  FROM A WHERE id IN (SELECT id FROM B); 等价于:1、SELECT id FROM B -----&amp;gt;先执行in中的查...
关于MySql的in用法
在MySql的where条件查询中会把数字自动转换为字符串,例如:栏目名称为 user_id,类型为varchar字符串类型,在写 sql时可以这样写select ..... from ....where user_id=00011或者user_id=00011都是可以正确找到结果的.但是如果用到了in用法,如 user_id in (00011,00012,00013)这样是
MySQL使用IN代替OR的原因
对于许多数据库服务器而言,IN()列表不过是多个OR语句的同义词而已,因为IN和OR在逻辑上是等同的。不仅是在MySQL数据库服务器,对于许多其他的数据库服务器使用到IN查询时,都是按照如下方式处理的: [1] 对IN列表中的数值进行排序。 [2] 对于查询的匹配,每次使用二分查找去匹配IN列表的数值。 所以对于第[2]步,每次比较的算法复杂度大概为O(log n)。相反,对于同样逻辑的OR列表,...
mysql的查询sql语句中in关键字的选项中最多可以带多少个
假设现在有一个学生表Student,有两个字段:学号stu_id、姓名stu_name 我想查询学号在某一个范围内的所有学生信息,SQL语句如下: SELECT * FROM student WHER
Mysql包含语句(in)用法
假设需要查看table_a表中包含table_b表中id的所有数据: select * from table_a where id in (select id from table_b); 括号中的语句查出的是table_b中所有的id。
Question_in_MySQL
Mac安装使用Mysql教程(从零开始) 第一章 Mac安装MySQL 1.1 过程记录 1.2 参考 第二章 安装数据库管理软件DBeaver 2.1 过程记录 2.2 参考 第三章 DBeaver创建MySQL数据库 3.1 过程记录 3.2 报错及解决 3.3 参考 第四章 终端管理MySQL 4.1 开启MySQL服务 4.2 登录MySQL(复杂) 4.3 登录My...
MySQL查询in操作 查询结果按in集合顺序显示
偶尔看到的。。。或许有人会注意过,但我以前真不知道SQL: select * from table where id IN (3,6,9,1,2,5,8,7);这样的情况取出来后,其实,id还是按1,2,3,4,5,6,7,8,9,排序的,但如果我们真要按IN里面的顺序排序怎么办?SQL能不能完成?是否需要取回来后再foreach一下?其实mysql就有这个方法sql: select * f...
解决MySQL中IN子查询会导致无法使用索引问题
来源:http://www.jb51.net/article/117412.htm今天看到一篇关于MySQL的IN子查询优化的案例,一开始感觉有点半信半疑(如果是换做在SQL Server中,这种情况是绝对不可能的,后面会做一个简单的测试。)随后动手按照他说的做了一个表来测试验证,发现MySQL的IN子查询做的不好,确实会导致无法使用索引的情况(IN子查询无法使用所以,场景是MySQL,截止的版本...
MySQL IN 查询优化
前几天看到一篇博文将 IN 子查询 优化为 LEFT JOIN 的问题,今天自己测试测试。 数据 数据表为 test_item 和 test_item_tag 两个表 test_item:两个字段 item_id[char(36)], release_time[int(11)],共10W条记录 test_item_tag:三个字段 id, item_d, tag_id,共64W条记录 1、IN ...
mysql中的in的用法
mysql中in的使用时,有个坑,就是在取值的时候不是按照顺序排列的。 直接上sql,如下: select provename from tb_prove where provcode in(871,371) 执行结果,并不是我想要的排序。想要的应该是871排在前面,而结果却是随机的如下: ...
mysql中EXISTS与IN用法比较
1、使用方式: (1)EXISTS用法 select a.batchName,a.projectId from ucsc_project_batch a where EXISTS (select b.id from ucsc_project b where a.projectId = b.id) 上面这条SQL的意思就是:以ucsc_project_batch为主表查询batchName...
深入理解MySql子查询IN的执行和优化
https://www.cnblogs.com/wxw16/p/6105624.html?utm_source=itdadao&amp;amp;utm_medium=referralIN为什么慢?在应用程序中使用子查询后,SQL语句的查询性能变得非常糟糕。例如:SELECT driver_id FROM driver where driver_id in (SELECT driver_id FROM dr...
JSP学习总结(多人智慧的结晶)下载
JSP学习总结 Servlet三个要素: 四种会话跟踪方式: 五:服务器上的五大对象 页面构成:7种元素 JavaBean: 表达式语言: 相关下载链接:[url=//download.csdn.net/download/wyf752855916/3552659?utm_source=bbsseo]//download.csdn.net/download/wyf752855916/3552659?utm_source=bbsseo[/url]
IBM TS7500快速维护手册下载
IBM TS7500快速维护手册 TS7500日常维护、使用 相关下载链接:[url=//download.csdn.net/download/wuguansheng/4332002?utm_source=bbsseo]//download.csdn.net/download/wuguansheng/4332002?utm_source=bbsseo[/url]
电力系统窗函数研究下载
对信号采用频率为1000Hz,首先对信号数据长度N=2048进行AR模型功率谱估计。 得到信号的AR功率谱 相关下载链接:[url=//download.csdn.net/download/u010535707/5322201?utm_source=bbsseo]//download.csdn.net/download/u010535707/5322201?utm_source=bbsseo[/url]
相关热词 c# gdi 占用内存 c#中遍历字典 c#控制台模拟dos c# 斜率 最小二乘法 c#进程延迟 c# mysql完整项目 c# grid 总行数 c# web浏览器插件 c# xml 生成xsd c# 操作sql视图
我们是很有底线的