我正在尝试提高跟踪网站上最流行路径的程序的性能。给定的URL在表会话页面中使用unique_id注册:
+-----------+--------------------------+---------------------+
| unique_id | page_url | mod_date_stamp |
+-----------+--------------------------+---------------------+
| 2378 | /resources/series75.html | 2008-10-03 22:49:00 |
+-----------+--------------------------+---------------------+
然后另一个表session,使用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,这花费的时间太长了。我想多次将sessionpage加入会话,以便page1 - page5字段显示url路径(或0 / null)而不是sessionpage中的unique_id来加速程序。
最终结果如下:
+-----------+---------+-----------------+-----------+---------------------+-------
| 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 :(得分:1)
根据你的评论第1页,第2页..是外键列,我认为这很简单。
类似的东西:
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
我认为这会奏效。
但是当列(表会话)上没有值时,应该使用null而不是0(零)。
另一个提示,在SELECT语句中,如果你不想要NULL值,你可以使用:
COALESCE(pg5.page_url, ' ') as page5