2013-07-25 171 views
1

我感謝你的時間。php count vs sql count vs count field?表演

你能否請你跟我分享一下你的經驗元素數

第一種方法 - 將元素作爲數組存儲在一個數據庫字段中,並在讀取一次後使用服務器端語言進行計數。

first approach

第二種方法 - 撒在字段中的陣列和計數使用SQL COUNT(2個表)的字段的數量。

enter image description here enter image description here

第三種方法 - 儲存在數據庫中的一個字段,它包含的元素計數的總和的unpdated值。

enter image description here

的approches的將被執行速度更快,並且易於擴展。

+0

SQL COUNT - 具有適當的規範化表格。但你沒有給出一個例子或場景 – zod

+0

只有一種方式找出suer,測試它 – 2013-07-25 20:51:50

+0

@Dagon,我非常同意你的看法。你有什麼建議我來測試這個。創建一個大表並運行查詢?使用沒有大桌子的工具?什麼工具用於SQL查詢以及用於PHP時間執行的工具?不要怪我在網絡世界中的新知識。謝謝 –

回答

3

將元素作爲數組存儲在一個數據庫字段中,並在讀取後使用服務器端語言進行計數。

這一個是壞壞壞。從設計的角度來看,這不僅是糟糕的,而且每次你​​想要計數時,都必須有效地返回所有元素。數據庫花費更長的時間讀取實際的文件頁面,以及更長的時間將數據發送回客戶端。一旦它在客戶端上,你就需要解析它,然後得到計數。所有采取,這可能是更慢的FAR,是一個更糟糕的設計。

將字段擴展到字段中並使用SQL COUNT計算字段數。

三者的最佳選擇,如果修改。您不想將數組作爲字段傳播。你真的想把它分散成行。你想要一個1到多個關係表。這使得數據庫能夠做到它擅長的事情,只訪問最少量的所需信息,並且最終只返回一個數字。這裏的每個人所涉及的工作量少得多。

在數據庫中存儲一個字段,該字段包含要計數的元素總數的未計算值。

這可能意味着兩件不同的事情。首先是你有一個你每次插入/刪除時手動更新的字段。這很糟糕,因爲它很容易被忘記,所以爲什麼呢?雖然這可能是所有選項中性能最高的,但它也增加了風險。第二,將有一個計算列存儲你的計數。這允許sql服務器爲你保留跟蹤,並且可以是使查詢更容易的合理選項,但是如果你抓取整行,否則不希望計數時會對性能產生負面影響。總體而言,其中的第二項並不差,但在實際情況良好的情況下,情況相當好。

+0

+1,我感謝您的詳細解答和編輯。非常感謝。我正在閱讀和理解 –

+0

請注意,在第一種方法中,我只會執行一次閱讀。當然它可以是一個很長的陣列。這是否仍然是一個不好的方法來避免? –

+1

我仍然會說是,因爲它的靈活性要低得多,雖然只讀一次,但每次都必須完整閱讀。它也可以跨越多個磁盤頁面,並且可以等同於多於一個讀取。數據庫沒有能力應用各種優化,比如使用索引,或者只是回退它要求的特定元素,如果你不想評估其中的每一個。 – Sethcran