2012-03-28 5 views
1

웹 사이트에서 가장 많이 사용되는 경로를 추적하는 프로그램의 성능을 향상 시키려고합니다. 주어진 URL은 UNIQUE_ID와 테이블 sessionpage에 등록 :MySQL 다중 테이블이 동일한 테이블에 결합되었습니다.

+-----------+--------------------------+---------------------+ 
| unique_id | page_url     | mod_date_stamp  | 
+-----------+--------------------------+---------------------+ 
|  2378 | /resources/series75.html | 2008-10-03 22:49:00 | 
+-----------+--------------------------+---------------------+ 

그런 다음 다른 테이블은, 세션, sessionpage에서 UNIQUE_ID를 사용하여 최대 5 개 URL을 세트의 히트 수를 계산합니다.

세션

+-----------+---------+-----------------+-----------+---------------------+------- 
| unique_id | counter | sequence_length | yearmonth | mod_date_stamp  | page1 | 
+-----------+---------+-----------------+-----------+---------------------+------- 
|   1 |  2 |    2 | 201203 | 2012-03-28 15:42:38 | 5298 | 
+-----------+---------+-----------------+-----------+---------------------+------- 

+-------+-------+-------+-------+ 
page2 | page3 | page4 | page5 | 
+-------+-------+-------+-------+ 
6075 |  0 |  0 |  0 | 
+-------+-------+-------+-------+ 

지금, 통계 프로그램은 너무 오래 걸리는 각 URL에 대한 세션 페이지에서 UNIQUE_ID를 가져 오는 있습니다. 나는 page1 - page5 필드가 프로그램을 빠르게하기 위해 sessionpage의 unique_id가 아닌 url 경로 (또는 0/null)를 표시하도록 sessionpage를 여러 번 세션에 참여시키고 싶습니다. 사전에

+-----------+---------+-----------------+-----------+---------------------+------- 
| unique_id | counter | sequence_length | yearmonth | mod_date_stamp  | page1 | 
+-----------+---------+-----------------+-----------+---------------------+------- 
|   1 |  2 |    2 | 201203 | 2012-03-28 15:42:38 | /path/index.html | 
+-----------+---------+-----------------+-----------+---------------------+------- 

+-------+-------+-------+-------+ 
page2   | page3 | page4 | page5 | 
+-------+-------+-------+-------+ 
/path3/disk.html |  0 |  0 |  0 | 
+-------+-------+-------+-------+ 

감사 :

최종 결과는 같아야합니다.

+0

두 번째 테이블에 UNIQUE_ID에 인덱스가 :

또 한가지, SELECT 문에, 당신은 당신이 사용할 수있는 NULL 값을하지 않으려면? – Randy

+0

아니요,있을 수 있습니다. 현재 unique_id는 세션의 기본 키입니다. 가능한 각 URL의 조합에는 고유 한 unique_id가 있습니다. – Zug

+0

왜 여러 번 가입해야하는지 이해가되지 않습니다. 당신의 테이블 구조가 당신이 한 번의 참여로 모든 정보를 얻을 수있는 것처럼 보입니다. 여러 조인은 성능에 도움이되지 않습니다. 최종 결과를 어떻게 보이게 할 것인지 명확히하십시오. – Cfreak

답변

1

page1, page2 ..이 외래 키 열이라는 귀하의 의견을 바탕으로 간단하다고 생각합니다. 같은

뭔가 :

SELECT 
    s.unique_id, s.counter, s.sequence_length, s.yearmonth, 
    s.mod_date_stamp, 
    pg1.page_url as page1, pg2.page_url as page2, 
    pg3.page_url as page3, pg4.page_url as page4, 
    pg5.page_url as page5 
FROM 
    session s 
LEFT JOIN 
    sessionpage pg1 ON pg1.unique_id = s.page1 
LEFT JOIN 
    sessionpage pg2 ON pg2.unique_id = s.page2 
LEFT JOIN 
    sessionpage pg3 ON pg3.unique_id = s.page3 
LEFT JOIN 
    sessionpage pg4 ON pg4.unique_id = s.page4 
LEFT JOIN 
    sessionpage pg5 ON pg5.unique_id = s.page5 

나는이 일 것이라 생각합니다.

그러나 (테이블 세션에서) 열에 값이없는 경우 0 (영) 대신 null을 사용해야합니다.

COALESCE(pg5.page_url, ' ') as page5 
관련 문제