MYSQL Sorgu sunucuyu kilitleme

0 Cevap php

Bu sorguyu yürütmek çalışırken benim mysql sunucu cpu kullanımı% 100 gider ve sayfa sadece tezgahları. Ben kurulum (Client_Code, Date_Time, Zaman_damgası, Activity_Code, Employee_Name, ID_Transaction) üzerinde bir dizin yardım gibi görünmüyor. Ben bu sorunu gidermek için bir sonraki adımlar hakkında ne gidebilir? Herhangi konularda eğer Ayrıca veritabanı üzerinde bir dizin zaten var. Teşekkürler

İşte bu sorgu ne olduğunu

Veritabanı bilgisi

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  

Yukarıdaki sorgu bilgi alır ve böylece gibi sayar. Her client_code için en son giriş tarafından. Bu durumda sorgu gibi görünecektir. Php sonra.

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"; 

Benim sistem çıkmaza gelmez bu yüzden bu sorguyu yazmak için daha iyi bir yolu var mı? Sorgu 10 veritabanı kayıtları ile çalışıyor ancak veritabanı 300.000 girişleri olduğunda benim sunucu kilitleniyor.

Thanks Eric

+----+--------------------+-------------+--------+------------------------+--------------+---------+----------------+------+----------+----------------------------------------------+
| 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                                  |
+----+--------------------+-------------+--------+------------------------+--------------+---------+----------------+------+----------+----------------------------------------------+

0 Cevap