处理mysql使用in关键字子查询1317错误_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1662 | 回复: 0   主题: 处理mysql使用in关键字子查询1317错误        下一篇 
shylone
注册用户
等级:下士
经验:199
发帖:90
精华:0
注册:2011-11-24
状态:离线
发送短消息息给shylone 加好友    发送短消息息给shylone 发消息
发表于: IP:您无权察看 2014-11-14 11:05:43 | [全部帖] [楼主帖] 楼主

       Error 1317 mysql query execution interrupted  消息内容:查询执行被中断(数据库直接挂起)

1. 现象: 

(1)在
PHP程序中使用子查询语句,导致Mysql自动“挂起”,即数据库“卡死”,程序不能正常运行

(2)在mysql命令行执行子查询语句,Mysql需要等待较长时间,提示 “  Error 1317 mysql query execution interrupted”  

2. 处理办法有两种 :

           006_kh表记录数目共计为 24256 条     uzone_2701_kh 表中记录数目共计为 52327条

原始SQL语句(子查询):

html]
SELECT count(kh_id) FROM `006_kh` WHERE  kh_id  in (select khbh from  uzone_2701_kh where uzbh ='180' and  jgm='27010899')


使用 desc 命令分析,结果如下:

[html]
mysql>
mysql> desc SELECT count(kh_id) FROM `006_kh` WHERE  kh_id  in (select khbh from  uzone_2701_kh where uzbh ='180' and  jgm='27010899') ;
+----+--------------------+---------------+-------+---------------+---------+---------+------+-------+--------------------------+
| id | select_type        | table         | type  | possible_keys | key     | key_len | ref  | rows  | Extra                    |
+----+--------------------+---------------+-------+---------------+---------+---------+------+-------+--------------------------+
|  1 | PRIMARY            | 006_kh        | index | NULL          | PRIMARY | 4       | NULL | 89394 | Using where; Using index |
|  2 | DEPENDENT SUBQUERY | uzone_2701_kh | ALL   | NULL          | NULL    | NULL    | NULL | 24256 | Using where              |
+----+--------------------+---------------+-------+---------------+---------+---------+------+-------+--------------------------+
2 rows in set (0.00 sec)


(1) 第一种方式:

sql脚本

[html]
select count(kh_id) FROM `006_kh` where kh_id in(select khbh from (select khbh from uzone_2701_kh where uzbh ='180' and  jgm='27010899') as khid_array)


使用 desc 命令分析,结果如下:

[html]
mysql> desc select count(kh_id) FROM `006_kh` where kh_id in(select khbh from (select khbh from uzone_2701_kh where uzbh ='180' and  jgm='27010899') as khid_array) ;
+----+--------------------+---------------+-------+---------------+---------+---------+------+-------+--------------------------+
| id | select_type        | table         | type  | possible_keys | key     | key_len | ref  | rows  | Extra                    |
+----+--------------------+---------------+-------+---------------+---------+---------+------+-------+--------------------------+
|  1 | PRIMARY            | 006_kh        | index | NULL          | PRIMARY | 4       | NULL | 96767 | Using where; Using index |
|  2 | DEPENDENT SUBQUERY | <derived3>    | ALL   | NULL          | NULL    | NULL    | NULL | 24099 | Using where              |
|  3 | DERIVED            | uzone_2701_kh | ALL   | NULL          | NULL    | NULL    | NULL | 24256 | Using where              |
+----+--------------------+---------------+-------+---------------+---------+---------+------+-------+--------------------------+
3 rows in set (0.02 sec)


(2)第二种方式 :

sql脚本 :

[html]
select count(a.kh_id)  from 011_kh a inner join uzone_2701_kh b on a.kh_id = b.khbh where b.uzbh ='180' and  b.jgm='27010899'


使用 desc 命令分析,结果如下: 

[html]
mysql>
mysql> desc select count(a.kh_id)  from 011_kh a inner join uzone_2701_kh b on a.kh_id = b.khbh where b.uzbh ='180' and  b.jgm='27010899'  ;
+----+-------------+-------+--------+---------------+---------+---------+--------------------+-------+-------------+
| id | select_type | table | type   | possible_keys | key     | key_len | ref                | rows  | Extra       |
+----+-------------+-------+--------+---------------+---------+---------+--------------------+-------+-------------+
|  1 | SIMPLE      | b     | ALL    | NULL          | NULL    | NULL    | NULL               | 24256 | Using where |
|  1 | SIMPLE      | a     | eq_ref | PRIMARY       | PRIMARY | 4       | dxzs_v2_new.b.khbh |     1 | Using index |
+----+-------------+-------+--------+---------------+---------+---------+--------------------+-------+-------------+
2 rows in set (0.00 sec)


  个人试验结论:使用JOIN语句的查询不一定总比使用子查询的语句快,根据我自己的试验结果和DESC分析结果 来说,还是JOIN语句比较快,效率比较高;因此,当使用in关键字进行子查询,效率低下时,强烈推荐第二种!

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论