MYsql查询和DB帮助

时间:2010-11-15 13:49:29

标签: php mysql

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

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

3 个答案:

答案 0 :(得分:2)

我感觉这是因为> AND旁边的标志,你试图用它做什么表达式?

答案 1 :(得分:0)

您能用简单的英语表达您查询后的结果吗?我有一种感觉,这个查询可以重写;这可能会解决您的性能问题。双重连接本身可能会严重影响性能。

类似“今天每位员工的交易数量”?

如果这就是您所追求的,请尝试并从那里进行改进:

select m.Employee_Name, count(m.ID_Transaction)
from Transaction m
where m.Date_time=CURdate()
and m.Time_Stamp != ''
and m.Activity_Code != '000001'
group by m.Employee_Name

答案 2 :(得分:0)

我可以发誓我今天已经在这里发布了我的回复......

为什么不使用双GROUP BY?我认为这就是你要找的......

SELECT Employee_Name, count(ID_Transaction) FROM Transaction WHERE Date_time=CURdate() AND Time_Stamp != '' AND Activity_Code != '000001' GROUP BY Client_Code, Employee_Name