2014-11-20 2 views
0

나는 테이블 USERDATA을 얻었고 새로운 컬럼을 거의 추가하지 않았습니다. 모두 NUL이 아니며 기본값은 0 또는 1입니다. 그러나 웹 사이트는 느린 속도로 진행됩니다. 정말 느리다는 뜻입니다. 그리고 그것은 때문에 내 웹 사이트에이 쿼리 스크립트의 : 그것은 이전에 모든 좋은 일테이블에 새 열을 추가하고 전체 데이터베이스의 속도를 줄입니다. 이유가 무엇입니까?

$num_rows = $db->doQuery('SELECT TOP 50 IDNum, IDName, Nation, (SELECT SUM(Loyalty) FROM USERDATA WHERE USERDATA.Knights = KNIGHTS.IDNum AND USERDATA.Authority = 1) as ClanLoyalty, (SELECT SUM(MannerPoint) FROM USERDATA WHERE USERDATA.Knights = KNIGHTS.IDNum AND USERDATA.Authority = 1) as ClanManner FROM KNIGHTS WHERE KNIGHTS.IDNum NOT IN (1,15001) ORDER BY ClanLoyalty DESC, IDName ASC'); 

하지만이 쿼리에 전혀 포함되지 않은 새 열을 추가 한 후 .. 여전히 TOP을 요청할 수있는 웹 사이트를 느리게 위 50. 기본적으로 SUM 쿼리가이를 수행하고 있습니다. 왜 이러한 새로운 컬럼이 그러한 문제점을 일으킬 수 있습니까?

USERDATA에는 32k 개의 행이 있으며 이전에는 모두 좋았습니다. 내가 constaint 지정하지 않았다,이 문제가 될 수 있을까?

나는 MSSQL 서버 2005

+0

안으로 변환하지 않을 수 있습니까? @NoDisplayName 쿼리가 다른 계획을 생성 할 수 있으므로 쿼리보다 훨씬 좋습니다. 실행 계획이있는 부하 테이블의 스키마를 공유 할 수 있습니까 –

답변

0

변경과 같은 쿼리를 사용합니다.

SELECT TOP 50 IDNum, 
       IDName, 
       Nation, 
       Sum(Loyalty)  ClanLoyalty, 
       Sum(MannerPoint) ClanManner 
FROM KNIGHTS 
     LEFT JOIN USERDATA 
       ON USERDATA.Knights = KNIGHTS.IDNum 
       AND USERDATA.Authority = 1 
WHERE KNIGHTS.IDNum NOT IN (1, 15001) 
Group by IDNum,IDName,Nation 
ORDER BY ClanLoyalty DESC, 
      IDName ASC 
+0

여기에서 토론을 볼 수 있습니다. http://stackoverflow.com/questions/27007413/sql-using-subqueries-instead-of-join-for-one-to-many/27007471 # 27007471 – radar

+0

@RADAR 합의되었지만 OP는 여전히 동일한 하위 쿼리를 두 번 사용하여 제거 할 수 있습니다. –

+0

여전히 느립니다. 그러나 필자가 테스트 한 결과 새 컬럼이 추가되었지만 이상한 부분은 이러한 쿼리에도 포함되지 않는다는 것입니다. 유일한 것은 새로운 열이있는 USERDATA의 데이터를 가져 오는 것입니다. 무엇이 이것을 일으킬 수 있습니까? 아마도이 열을 편집해야 할 것입니다. bigint가 MSSQL Server 2005에서 도청되었거나 시도해야하는 이유는 무엇입니까? 내가 정말 고칠 수 없기 때문에 저에게 어떤 지점을 주시겠습니까? – MokIk

관련 문제