MySQL-mysql操作时是用in操作好些还是不用in操作好些?

MySQL-mysql操作时是用in操作好些还是不用in操作好些?

清晨说ぺ晚安 发布于 2017-03-04 字数 282 浏览 1255 回复 3

数据库操作时是用in操作好些还是不用in操作好些?
如果用别的方法有什么更好的途径来解决。
比如有时要集体更新表的某个字段,
通过复选区框选择id如果用正常的方式用in操作是最好的,
但我听某些牛人说这样操作会很耗资源的。
如: update table status=1 where id in(1,2,30);

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

瑾兮 2017-09-02 3 楼

当子查询速度慢时,可用JOIN来改写一下该查询来进行优化。
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)

mysql> select a.* from abc_number_prop a inner join abc_number_phone b on a.number_id = b.number_id where phone = '82306839';

67 rows in set (0.00 sec)

连接(JOIN)之所以更有效率一些,是因为 MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作

偏爱自由 2017-08-24 2 楼

一般in表达式可以用exist表达式来替换,一般情况下,IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况,因此,如果in里面如果是一个查询条件,可以根据外表和内表的大小情况来判断是否用exist来替换。

想挽留 2017-04-13 1 楼

方法一:
in可以用exists来进行替代,但是这个exists基本上是很少人用.
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。如果查询的两个表大小相当,那么用in和exists差别不大。

方法二、
可以在应用层写一个循环,然后根据ID等于操作逐条对数据进行更新,这样的好处就是不用in操作,而一般ID都有索引,所以定位数据将会很快,缺点就是要多次和MySQL建立数据连接来处理数据。
MySQL的where in操作确实是很耗效率的,但是这也不是绝对的,在高并发的情况下,如果更新的数据不是很多,还是推荐使用in操作,因为高并发下,数据库连接是很宝贵的。

当然如果可以不用in操作或者是可以将in操作转化成其它操作的尽量不要用in操作,举个例子:
update table status=1 where id in(1,2,30);
可以优化成
update table status=1 where id=1 OR id=2 OR id=30;

这样效率会高很多。