in条件中支持最大的参数长度

in条件中支持最大的参数长度,第1张

in条件中支持最大的参数长度为1000,超过了就会报错。扩展资料mysql in条件内容过多时处理方法1.使用exists写法替代in写法,exists写法是使用条件查询替代in写法里的一长串字串,这个有时候没法使用,比如使用第三方接口查学校一年级2千个学生的考试成绩,你只知道这些学生的id,没有更多的关联条件2.使用or的写法,将in条件过长的字串拆开,具体方法的代码可以去网上搜索一下,一般是找得到的。

1、启动选项中修改

启动mysql的时候加参数 -O max_heap_table_size=64M 。

2、修改my.cnf

在[mysqld]的段中 增加 max_heap_table_size = 32M

3、在mysql客户端工具中修改

mysql>set max_heap_table_size=32777216

Query OK, 0 rows affected (0.00 sec)

mysql>show variables like '%heap%'

+---------------------+----------+

| Variable_name | Value|

+---------------------+----------+

| max_heap_table_size | 32777216 |

+---------------------+----------+

1 row in set (0.00 sec)

如果查询的两个表大小相当,那么用in和exists差别不大。

如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:

例如:表A(小表),表B(大表)

1:

select * from A where cc in (select cc from B) 效率低,用到了A表上cc列的索引

select * from A where exists(select cc from B where cc=A.cc) 效率高,用到了B表上cc列的索引。

相反的

2:

select * from B where cc in (select cc from A) 效率高,用到了B表上cc列的索引;

select * from B where exists(select cc from A where cc=B.cc) 效率低,用到了A表上cc列的索引。

not in 和not exists如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。

in 与 =的区别

select name from student where name in ('zhang','wang','li','zhao')

select name from student where name='zhang' or name='li' or name='wang' or name='zhao'

的结果是相同的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6143820.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-16
下一篇 2023-03-16

发表评论

登录后才能评论

评论列表(0条)

保存