您好,欢迎访问一九零五行业门户网

处理mysql使用in关键字子查询1317错误_MySQL

bitscn.com
处理mysql使用in关键字子查询1317错误
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 |    | 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关键字进行子查询,效率低下时,强烈推荐第二种!
bitscn.com
其它类似信息

推荐信息