<!-- BBCode Quote Start --><FONT COLOR=GREEN>
viewtopic.php 現在的瓶頸是在會員資料上, 為了顯示會員的等級、文章數而又不想佔用 posts table 的空間,所以每一篇會員資料都必須下一個 Query 來跑,這是比較辛苦的 ...
phpBB 官方的資料庫設計並不理想,但是 phpBB 卻完全沒有用到 JOIN 等結合資料表的敘述
![:)](./images/smilies/icon_smile.gif)
</FONT><!-- BBCode Quote End -->
在選取資料的時候join多個資料表,在很複雜的狀況下會比較慢(而且這種時候索引的使用更重要),然而很多狀況下join多個資料表可以一次取出要用的資料,讓總 query 次數降低,反而能夠提高效率。
我不太清楚phpBB的資料表結構,不過假設每篇文章儲存在 post 資料表中,使用者資料儲存在 user 資料表中(當然每筆 post 紀錄必須有個 foreign key,參照到 user 資料表的 primary key),那麼可以使用 join 來同時把文章資料與該篇文章作者資料一起取出。換句話說,依照 DearHoney 的說法,原本每頁 x 篇文章必須送出 1 + x 次查詢(後面 x 應該是在迴圈裡面送出的),使用 join 的話,就只要一次就可以了,並且與 x 值無關。而且只要索引使用得當,這樣的join並不會慢。
不過如果使用者發表文章數目也是即時計算的話(也就是說 user 資料表裡面並沒有一個欄位用來儲存文章數目),情況會更複雜一些。
至於敝人設計的討論區系統,上線日期還沒到
![:)](./images/smilies/icon_smile.gif)
最主要的麻煩在會員系統完全是另一家公司在負責開發,而且環境和用的語言也不一樣。討論區要搭配的資料庫對方還沒決定(可能是 Oracle 或者 PostgresSQL,也有可能是 MySQL),會員資料存在另一部 Oracle 資料庫(跟討論區的不會是同一部),而且不開放討論區的 PHP 程式直接存取,必須透過該公司提供的 API(一個 Java Class)來取得會員資料。更扯的是會員登入認證系統又是第三家公司在負責,使用 JSP 存取一個 LDAP 伺服器。最令人頭大的是最後這三部分全部都要整合在一起。。。真的讓人傷透腦筋 >_<
---
多言了...