想查询一张表中的数据String ids = "124,123,254,148,154";String sql = "select * from emp where id in ("+ ids +")";问题如下:当ids很长的时候,查询不仅很慢,而且会报错,怎么弄比较好?有解决的办法吗?????
ids数据长度一般为1W+ ,表的记录条数为30W+
ids数据长度一般为1W+ ,表的记录条数为30W+
调试欢乐多
mysql> show variables like 'max_allowed_packet';
+--------------------+---------+
| Variable_name | Value |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+
1 row in set (0.00 sec)mysql>
MYSQL在处理IN的时候,过程是在记录里取出一个数,然后到IN列表里面用2分法去查询,是否存在相同的,U如果有,那么把记录拿出来,组成结果集。MSSQL在处理的时候会一条条去判断,类似OR的方法。MYSQL在处理IN的时候相对来说还是比较高效。在比较列的长度很大的时候,2分法也快不到哪去。建一个中间表,把需要比较的值写进去,再加个索引,用JOIN连接查询,效率会高很多。