php - MYSQL查询锁定服务器

标签 php mysql

当尝试执行此查询时,我的 mysql 服务器 cpu 使用率达到 100%,页面停止运行。我在 (Client_Code, Date_Time, Time_Stamp, Activity_Code, Employee_Name, ID_Transaction) 上设置了一个索引,它似乎没有帮助。接下来我可以采取哪些步骤来解决此问题?如果重要的话,数据库中也已经有一个索引。谢谢

这是这个查询的作用

数据库信息

ID_Transaction | Client_Code | Employee_Name | Date_Time |Time_Stamp| Activity_Code  
1               | 00001       |  Eric         |   11/15/10|   7:30AM |     00023  
2               | 00001       |  Jerry        |   11/15/10|   8:30AM |     00033  
3               | 00002       |  Amy          |   11/15/10|   9:45AM |    00034  
4               | 00003       | Jim           |   11/15/10|   10:30AM |   00063  
5               | 00003       | Ryan          |   11/15/10 |   12:00PM |   00063  
6               | 00003       | bill          |   11/14/10 |   1:00pm  |  00054    
7               | 00004       | Jim           |   11/15/10 |   1:00pm  | 00045  
8               | 00005       | Jim           | 11/15/10| 10:00 AM| 00045  

查询获取上面的信息并像这样计算它。通过每个 client_code 的最新条目。在这种情况下,查询将如下所示。 php之后。

Jerry = 1    
2               | 00001       |  Jerry        |   11/15/10|   8:30AM |     00033     
Amy = 1   
3               | 00002       |  Amy          |   11/15/10|   9:45AM |    00034   
Ryan = 1  
5               | 00003       | Ryan          |   11/15/10 |   12:00PM |   00063  
Jim = 2  
7               | 00004       | Jim           |   11/15/10 |   1:00pm  | 00045  
8               | 00005       | Jim  | 11/15/10| 10:00 AM| 00045   



 $sql = "SELECT m.Employee_Name, count(m.ID_Transaction)   
FROM ( SELECT DISTINCT Client_Code FROM Transaction)   
 md JOIN Transaction m ON    
m.ID_Transaction = ( SELECT  
ID_Transaction FROM Transaction mi  
WHERE mi.Client_Code = md.Client_Code AND Date_Time=CURdate() AND Time_Stamp!='' AND 
 Activity_Code!='000001'  
ORDER BY m.Employee_Name DESC, mi.Client_Code  DESC, mi.Date_Time DESC,  
mi.ID_Transaction DESC LIMIT 1 )  
group by m.Employee_Name"; 

有没有更好的方法来编写此查询,以免它使我的系统陷入困境?该查询适用于 10 个数据库条目,但当数据库有 300,000 个条目时它会锁定我的服务器。

谢谢 埃里克

+----+--------------------+-------------+--------+------------------------+--------------+---------+----------------+------+----------+----------------------------------------------+
| id | select_type        | table       | type   | possible_keys          | key          | key_len | ref            | rows | filtered | Extra                                        |
+----+--------------------+-------------+--------+------------------------+--------------+---------+----------------+------+----------+----------------------------------------------+
|  1 | PRIMARY            | <derived2>  | ALL    | [NULL]                 | [NULL]       | [NULL]  | [NULL]         |    8 |   100.00 | Using temporary; Using filesort              |
|  1 | PRIMARY            | m           | index  | [NULL]                 | search index | 924     | [NULL]         |   21 |   100.00 | Using where; Using index; Using join buffer  |
|  3 | DEPENDENT SUBQUERY | mi          | ref    | search index,secondary | search index | 18      | md.Client_Code |    3 |   100.00 | Using where; Using temporary; Using filesort |
|  2 | DERIVED            | Transaction | index  | [NULL]                 | secondary    | 918     | [NULL]         |   21 |    38.10 | Using index                                  |
+----+--------------------+-------------+--------+------------------------+--------------+---------+----------------+------+----------+----------------------------------------------+

最佳答案

如何使用多个 GROUP BY 而不是所有的子查询来简化事情......像这样:

SELECT * FROM Transaction WHERE Date_Time=CURdate() AND Time_Stamp!='' AND Activity_Code != '000001' GROUP BY Client_Code, Employee_Name

如果我正确理解您的查询,那么类似这样的事情将解决问题并避免对子查询的需要。

关于php - MYSQL查询锁定服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4187370/

相关文章:

php - 将 {} 内的 CSS 拆分为键/值对数组

javascript - 如何使用 bootstrap 分页器库对 PHP 回显的数据进行分页?

mysql - 在 MySQL 表中表示多值元素的方法

php - 如何使用 CI 事件记录仅在 DATE 数据类型列中选择月份部分?

php - 从原始 sql 更改为 codeigniters 事件类

javascript - 使用 json 对象在 map 上添加多个标记

php - 将多个 PHP 变量分配给 MySQL 值

PHP - 如何让我的用户保持登录状态?

python - MySQL 和 Python Select 语句问题

php - 作为 cronjob 运行脚本时为 "MySQL server has gone away"