2012-03-28 19 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)が表示され、プログラムのスピードアップが行われます。事前に

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

なぜ何度も参加する必要があるのか​​分かりません。あなたのテーブル構造が、あなたが1回の参加ですべての情報を得る方法であるようです。複数の結合がパフォーマンスに役立つことはありません。最終結果がどのように見えるかを明確にしてください。 – 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 
関連する問題