 |
รบกวนดู Query หน่อยครับว่ามันช้าเพราะอะไร พอดีเครื่องผมrunได้แต่พออัพขึ้น server แล้วมันไม่แสดง |
|
 |
|
|
 |
 |
|
Code (SQL)
SELECT *,
(SELECT
SUM(IF(T2.CostNormal_Unit&&T2.CostNormal_SecUnit&&T2.CostNormal_Cost,
((T2.CostNormal_Unit*T2.CostNormal_Cost)*T2.CostNormal_SecUnit),
IF(T2.CostNormal_Unit&&T2.CostNormal_Cost,(T2.CostNormal_Unit*T2.CostNormal_Cost),
IF(T2.CostNormal_SecUnit&&T2.CostNormal_Cost,(T2.CostNormal_SecUnit*T2.CostNormal_Cost),
T2.CostNormal_Cost)
)
)) AS Total
FROM budget_project_cost_mapsubactivity AS T1
INNER JOIN budget_project_cost_subactivity_normal AS T2
ON T1.MapActCost_Id = T2.MapActCost_Id AND T2.CostNormal_Phrase = 1
WHERE T1.SubActivity_Id IN(SELECT A.SubActivity_Id FROM budget_project_activity_sub AS A INNER JOIN budget_project_activity AS B ON A.Activity_Id = B.Activity_Id WHERE B.Project_Id IN (T1.Project_Id))) AS SumCost1,
(SELECT
SUM(IF(T2.CostNormal_Unit&&T2.CostNormal_SecUnit&&T2.CostNormal_Cost,
((T2.CostNormal_Unit*T2.CostNormal_Cost)*T2.CostNormal_SecUnit),
IF(T2.CostNormal_Unit&&T2.CostNormal_Cost,(T2.CostNormal_Unit*T2.CostNormal_Cost),
IF(T2.CostNormal_SecUnit&&T2.CostNormal_Cost,(T2.CostNormal_SecUnit*T2.CostNormal_Cost),
T2.CostNormal_Cost)
)
)) AS Total
FROM budget_project_cost_mapsubactivity AS T1
INNER JOIN budget_project_cost_subactivity_normal AS T2
ON T1.MapActCost_Id = T2.MapActCost_Id AND T2.CostNormal_Phrase = 2
WHERE T1.SubActivity_Id IN(SELECT A.SubActivity_Id FROM budget_project_activity_sub AS A INNER JOIN budget_project_activity AS B ON A.Activity_Id = B.Activity_Id WHERE B.Project_Id IN (T1.Project_Id))) AS SumCost2,
(SELECT
SUM(IF(T2.CostNormal_Unit&&T2.CostNormal_SecUnit&&T2.CostNormal_Cost,
((T2.CostNormal_Unit*T2.CostNormal_Cost)*T2.CostNormal_SecUnit),
IF(T2.CostNormal_Unit&&T2.CostNormal_Cost,(T2.CostNormal_Unit*T2.CostNormal_Cost),
IF(T2.CostNormal_SecUnit&&T2.CostNormal_Cost,(T2.CostNormal_SecUnit*T2.CostNormal_Cost),
T2.CostNormal_Cost)
)
)) AS Total
FROM budget_project_cost_mapsubactivity AS T1
INNER JOIN budget_project_cost_subactivity_normal AS T2
ON T1.MapActCost_Id = T2.MapActCost_Id AND T2.CostNormal_Phrase = 3
WHERE T1.SubActivity_Id IN(SELECT A.SubActivity_Id FROM budget_project_activity_sub AS A INNER JOIN budget_project_activity AS B ON A.Activity_Id = B.Activity_Id WHERE B.Project_Id IN (T1.Project_Id))) AS SumCost3,
(SELECT CONCAT(FirstName,' ',LastName) FROM tbluser WHERE UserId = T1.Create_by) AS Author,
PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM Stop),EXTRACT(YEAR_MONTH FROM Start))+ 1 AS Period
FROM(SELECT B.*,
(SELECT S.Status_Description FROM budget_init_status AS S WHERE LOWER(B.Project_Status) = LOWER(S.Status_Key)) AS StatusDescription,
B.Project_Start_Year AS StartYear,
B.Project_Start_Month AS StartMonth,
B.Project_End_Month AS StopMonth,
STR_TO_DATE(CONCAT((B.Project_Start_Year - 543),',',B.Project_Start_Month,',','1'), '%Y,%m,%d') AS Start,
STR_TO_DATE(CONCAT((B.Project_End_Year - 543),',',B.Project_End_Month,',','1'), '%Y,%m,%d') AS Stop,
BB.BPI_Name,
IF(BBB.ShortName,CONCAT(BBB.Organize,' ','(',BBB.ShortName,')'),BBB.Organize) AS OrgName,
BBB.ShortName
FROM budget_project AS B
INNER JOIN budget_plan_item AS BB ON BB.BPI_Id = B.BPI_Id
LEFT JOIN tblorganize AS BBB ON BBB.OrganizeId = B.OrganizeId
) AS T1
ปัญหามีอยู่ว่าQueryนี้พอใส่ในเครื่องผมมันแสดงผลลัพท์แต่พออัพขึ้น server มันกลับไม่แสดง
พอลองcopy มันมา run ข้างนอกในdatabaseปรากฎว่าใช้เวลานานพอสมควร เป็นนาทีได้ พอลอง set ใน php.ini
ให้เวลา execute นานขึ้นก็ยังไม่หาย ไม่ทราบควรทำไงดีครับ
Tag : PHP, MySQL
|
|
 |
 |
 |
 |
Date :
2011-07-06 10:55:37 |
By :
Ptolemy |
View :
18530 |
Reply :
6 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
น่าจะเป็นที่ Query หนักครับ แก้ php.ini ก็ไม่หายครับ วิธีแก้ไขก็คือการปรับจูนตัว SQL Statement นี่แหละครับ
|
 |
 |
 |
 |
Date :
2011-07-06 11:11:13 |
By :
webmaster |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
server เป็น linux ป่าวครับ
ลองปรับไฟล์ my ดูครับ
|
 |
 |
 |
 |
Date :
2011-07-06 14:26:30 |
By :
avsqlz |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เท่าที่ดูคิวรี่แบบผ่านก็ ไม่น่าแปลกหรอกครับที่มันจะช้า 
ที่ผมเคยทำนะครับ ถ้าหน้าไหนที่มีการคิวรี่ข้อมูลเยอะ ต้องการข้อมูลจากหลายตาราง ผมจะไม่ join ทั้งหมด
แต่จะดึงมาเป้นส่วนๆ แล้วค่อยมาจัดการใน PHP อีกครั้งนึง อันนี้พอช่วยได้ ลองดูว่าของคุณมันจะแยกกันคิวรี่ได้หรือเปล่า
บางทีคิวรี่ย่อยๆ หลายทีเอา มันจะเร็วกว่า คิวรี่ใหญ่ที่เดียว เป็นประสบการณ์ส่วนตัวนะครับ 
เพิ่มเติมอีกนิดนึงนะครับ ถึงแม้ว่าคุณจะไปปรับแก้ใน mysql หรือว่า php.ini ให้สามารถรันคิวรี่นี้ผ่านแล้วลองนึกดูนะครับว่านึ่ขนาดคุณเข้ามาดึงข้อมูลแค่คนเดียว ถ้าเกิดเปิดใช้งานจริงยูสเซอร์เข้ามาใช้งานหน้านี้พร้อมๆ กันเยอะๆ ที่นี้ละตัว DB Server ของคุณจะทำงานหนัก
|
ประวัติการแก้ไข 2011-07-06 14:52:40 2011-07-06 14:52:52
 |
 |
 |
 |
Date :
2011-07-06 14:48:12 |
By :
naskw |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Query กับข้อมูลขนาดใหญ่ เป็นปัญหากับหลาย ๆ ระบบที่เขียน Query ไม่ค่อยดีครับ 
|
 |
 |
 |
 |
Date :
2011-07-06 15:06:37 |
By :
webmaster |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ยิ่งจอยยิ่งช้าคับ มันจำทำการสร้าง ตารางเสมือน ไว้ใน เมมโมรี่ แต่คิวรี่ยาวขนาดนี้ เพิ่งเคยเห็น 
น่าจะใช้ Database แบบไม่ relation นะ 
|
 |
 |
 |
 |
Date :
2011-07-06 15:09:32 |
By :
pjgunner.com |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณทุกคำตอบครับ จะลองไปปรับแก้ดูครับ
|
 |
 |
 |
 |
Date :
2011-07-07 10:04:19 |
By :
ptolemy |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|