帮忙处理一个SQL语句 想查询一张表中的数据String ids = "124,123,254,148,154";String sql = "select * from emp where id in ("+ ids +")";问题如下:当ids很长的时候,查询不仅很慢,而且会报错,怎么弄比较好?有解决的办法吗?????ids数据长度一般为1W+ ,表的记录条数为30W+ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 MYSQL有一个参数 max_allowed_packet ,定义了SQL语句的最大长度。 把这个改大试一下。mysql> show variables like 'max_allowed_packet';+--------------------+---------+| Variable_name | Value |+--------------------+---------+| max_allowed_packet | 1048576 |+--------------------+---------+1 row in set (0.00 sec)mysql> 另外也不建议这样做。你可以把IDS中的每个数字直接写到某个临时表中 temp_x(id int),然后再直接用JOIN查询。这样会好一点儿。 max_allowed_packet 把这个加大。MYSQL在处理IN的时候,过程是在记录里取出一个数,然后到IN列表里面用2分法去查询,是否存在相同的,U如果有,那么把记录拿出来,组成结果集。MSSQL在处理的时候会一条条去判断,类似OR的方法。MYSQL在处理IN的时候相对来说还是比较高效。在比较列的长度很大的时候,2分法也快不到哪去。建一个中间表,把需要比较的值写进去,再加个索引,用JOIN连接查询,效率会高很多。 各位老大,过来看看那个SQL语句性能高 大家看我的这个表的字段设计有什么问题? query_cache_size是否应该禁用? MySQL Admin Cookbook source命令??? mysql启动问题 选用MySQL合适吗? 声明一个变量,function 错, procudere 对,为什么 mysql数据库利用主从同步部署为环形互相热备的方案 mysql 5.7.17老版本binlog恢复出的sql无法导入数据库问题 求在MYSQL中栏位里面的数据再加入多一个字符 转贴:PHP数据库方面的面试题
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连接查询,效率会高很多。