PHP草根滴我們,一直以為數據庫是萬能,為了實現功能卻很少去考慮效率與數據庫瓶頸問題,比如在一個循環中查詢數據庫,一個迭代方法中查詢數據庫都是非常不可取滴,尤其是前端程序,在訪問量不大,并發少時看不出任何問題,一旦訪問量突增,并發訪問量多時往往就成數據庫服務器負荷過重,嚴重情況會宕機,后果真不堪設想,而且在這種情況下PHP程序員往往很難查具體原因.
先看一個迭代案例代碼,當分類達到1000個以上滴時候,調用一次就要查詢超1000次以上滴數據庫查詢,這樣滴代碼是何其恐怖,不用再細說了吧,代碼如下:
- /**
- * 遞歸獲取分類
- * @author:xxx
- * @param $tree_id
- */
- function get_child_tree($tree_id = 0)
- {
- $three_arr = array();
- $sql = “SELECT count(*) FROM TABLE WHERE parent_id = “$tree_id” AND is_show = 1 ";
- if ($GLOBALS[db]->getOne($sql) || $tree_id == 0)
- {
- $child_sql = "SELECT ……";
- $res = $GLOBALS[db]->getAll($child_sql);
- foreach ($res AS $row)
- {
- if ($row[is_show])
- {
- $arr[id] = $row[cat_id];
- ……
- }
- if ( intval($row[cat_id]) != 0) {
- $three_arr[$row[cat_id]][cat_id] = get_child_tree($row[cat_id]);
- ……
- }
- }
- }
- return $three_arr;
- }
再有一些例子,有些同學喜歡用while,for等循環中作數據庫查詢操作,同樣是不可取滴,還是那句話,當數據庫并發更新不大,或者訪問量不大滴情況下,數據庫服務器負荷也是很重滴,操作時須謹慎,特別是在作為封裝滴函數內部,因為往后滴程序你會不小心滴多調用幾次這個函數,那造成服務器滴開銷是無法估量滴.
新聞熱點
疑難解答