Home >Database >Mysql Tutorial >处理mysql使用in关键字子查询1317错误_MySQL

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

WBOY
WBOYOriginal
2016-06-01 13:35:161387browse

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
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn