2013-04-25 68 views
1

我有一個133,000,000行的數據庫表。我的數據庫數據不會像一年那樣變化,所以我不需要任何插入到這個數據庫中,也不需要任何我只需要從中獲取數據。例如,獲取具有國家澳大利亞的60行。考慮到數據量,這種情況正在變得緩慢。我的問題是,將我的數據存儲到已編入索引的文件中是否更好?例如製作所有字母和數字的文件夾。將數據存儲在結構良好的文件系統中比查詢大型數據庫表更快嗎?

因此,將有35個文件夾A,B,C,D,E,....,7,8,9,然後在這些文件夾中的每個文件夾中有國家,城市等的文件夾...所以澳大利亞去在A - >國家 - >澳大利亞,然後在澳大利亞文件夾內我將我的數據庫中的所有澳大利亞數據分成文件。

這將是更快的PHP獲取,而不僅僅是查詢133,000,000行的表?

+1

永遠做你自己的測試...;) – 2013-04-25 06:55:11

+0

我知道,但我想將數據庫置於前有一個想法文件比發現它毫無價值。 – CodeBird 2013-04-25 07:01:37

回答

2

這實際上取決於你想如何查詢數據。如果只按照國家來查詢你想要做的事情,那麼按國家過濾它將會起作用 - 如果你想按城市或國家查詢,怎麼辦?人口> 500萬的城市的數據?那就是每當一個結構良好的索引良好的數據庫就會獲勝。

+0

感謝您的快速回答。我不需要做或者沒有複雜的查詢,它總是像給我這個城市的所有行一樣,或者讓我所有的行都不在這個狀態。我將在所有情況下爲這些事務保留數據庫,但基本上會將提取大量數據用於單一條件,從文件讀取。 – CodeBird 2013-04-25 06:59:47

+0

我會在RAM中緩存特定查詢的結果。那會很快。根據您的應用程序的作用,您可能希望在應用程序「啓動」中使用該組查詢(country = x?的行)緩存。 – 2013-04-25 07:06:10

+0

所以基本上我們這裏所說的是:不要去文件的方式:) – CodeBird 2013-04-25 07:09:02

0

您可以根據國家名稱將主表分爲子表。例如來自國家canadatable_usa的來自國家usa等的所有行的所有行的table_canada等。然後,如果你想獲取從他們的數據,你的代碼應該是這樣的:

$country = "canada"; //or from a form like $country = $_POST['country']; 
$table = "table_" . $country; 
$query = "SELECT * from $table ..."; 
... 
+0

嗯想法。爲每個國家的城市國家制作一張桌子....會導致很多桌子。 如果我通過例如像countries_a,這將包含一個數據的一個領域我想這樣例如 countries_a將開始所有國家的字母分隔它們: ID - 國家 - 姓名 1 - 澳大利亞 - XXX 2 - 阿根廷 - YYY 等。我認爲這會讓我的數據訪問速度更快。 意見請... – CodeBird 2013-04-25 09:22:19

+0

是的,這將是一個很好的方法。這只是一個建議。但是不要太複雜 – Amir 2013-04-25 09:50:29

+0

對於派對來說很晚,但是這個「子表」事實際上叫做分區,不需要爲每個國家創建一個新表,你可以按國家來分區,這有相同的效果 – Patrick 2015-05-17 18:37:38

相關問題