程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Php mysql處理大容量數據存儲

Php mysql處理大容量數據存儲

編輯:MySQL綜合教程

在一個php的論壇上看到了這樣一個貼子,索引將答案貼到這裡讓大家看看,希望對大家有幫助

quote:
--------------------------------------------------------------------------------

當數據庫很大如10萬條,1gb大小時,怎樣搜索才高效?
請問版主,我現在在調試一個論壇,向數據庫中寫入了10萬多條信息,此時主要的內容都集中在一個表上,有近1gb大小。
搜索該論壇時很慢,特別是全文搜索時,即使只用
select * from `cdb_posts` where message='本破爛陳舊的小冊子從懷中取出遞給我'

也很慢,在台式機上甚至根本運行不完。但我聽說sun公司的論壇(下面有近百個分論壇)進行全文搜索時也不超過20秒,我們能否做到。

我運行搜索程序時,cpu和內存占用率都很低,只有硬盤燈一直在閃,我總認為是程序不夠高效,是不是可以把程序寫出類似“多線程”,以提高效率。

請版主和各路大俠指教!
謝謝。

--------------------------------------------------------------------------------



有人建議它用oracle

我覺得有一點大家要注意,那就是如果你讓oracle執行一個 select * from xxxx where xxx = 'xxxxxxxxxxxxxx';

這個表有1g的時候絕對不會比mysql快上多少。

現在的這麼多流行的數據庫系統上執行相同的操作時不可能快上很多倍的。

關鍵在於你的數據庫設計。

我在做一個商業信息的搜索引擎,在做的過程中得到一些經驗。如下:

1。 建立摘要表
2。 對於那些數字形式且經常查詢的數據一定要建立索引,我不記得在哪裡看到一篇貼子說什麼:“不要用那垃圾的索引”.郁悶了n久。這種貼子都有。。哎。
建議: 在where中的用到的尺寸不大的condition一般都要索引。尺寸大的單獨表中存儲且要用like查詢的單獨表中存儲。
3。 對於有很多結果的時候不要select *... ,先select id.... 然後取得id後進行分頁控制,取出當前頁中的id到數組。。 再執行select * from xxx where id in(implode(',', $id數組);
如果得到的數據還要進行join,請在這條select 語句中來進行。因為這樣數據庫進行join的選擇因子會小很多。

4。對於要全文檢索的數據和現在的數據分離出來。以數據庫設計中第二范式的形式表示.在單獨表中存儲和數據主鍵對應的信息.

5。給表加上一個primary , int(smallint、tinyint 看要多少條數據).

6。在做好系統後用explain select .... 對系統中耗時的語句進行分析。看看mysql是如何處理這條語句的。

7。如果有可能,把信息分表存儲(也可分布在不同的數據庫服務器上)

本人禺見,覺得好的頂一看。。覺得差的就當是看個笑話。。。


__________________

本人回答的問題,如無特別注明, 均未測試過....

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved