2010-11-16 46 views
0

在用戶表中,我有超過100萬條記錄,所以我如何使用MySQL,Symfony 1.4來管理。使性能更好。如果我們有超過100萬條記錄,如何提高mysql查詢的性能?

因此它可以提供快速輸出。

+1

不可能。你不能擁有比這個星球上的人更多的用戶。 – 2010-11-16 10:38:39

+1

1.000.000.000.000用戶?這比全球人口多150倍以上?你到底在做什麼? – oezi 2010-11-16 10:40:16

+0

不可能二。 UserId有4個字節,UserName有10個字節,所以你需要一個14TB的數據庫。哦,我忘記了表格中真實的數據,如生日和真實姓名。 – 2010-11-16 10:41:19

回答

0

起先:theres a 區別在1萬億到100萬之間。

對您的性能問題:向我們展示查詢運行緩慢,沒有看到它,很難說出它有什麼問題。你可以嘗試:

  • 使用EXPLAIN讓你慢querys更多信息,看看他們是否正在使用您的索引或如果沒有(如果沒有,爲什麼不呢?)
  • 使用正確,合理indexes
+0

從dirctory_email選擇電子郵件,其中電子郵件<>''限制0,10000000; 加載我需要太多的時間我有超過1000萬用戶記錄的美國 – 2010-11-16 11:11:00

+0

@Ankit:請編輯你的問題提供這些信息,所以每個人都會看到它,而不閱讀所有的意見。另外,請展示/解釋該表格的結構並給出一些例子 - 儘可能提供儘可能多的(合理的)信息,並且不要讓我們對每件作品進行討論。 – oezi 2010-11-16 11:18:23

+0

@Ankit,一個評論'選擇*從任何地方限制0,10000000'是非常沒用的例子;或者換句話說,你並沒有選擇這些記錄來向用戶展示這些記錄(就像你是一樣,性能肯定會是足夠的 - 系統,但是速度很慢,會讓它們吐出更快,然後用戶可以閱讀);所以你可能試圖與他們做些什麼,這應該是你的問題 - 爲我們提供一個典型的交易,你需​​要表現良好。 – Unreason 2010-11-16 11:32:56

2

要顯着提高設計良好的系統的性能,您只需增加資源即可。通常,現在最便宜的方法就是分發任務。例如,RDBM系統中的一個緩慢的事情是從存儲中讀取和寫入數據(通常RDBMs系統以I/O綁定開始,即他們主要等待數據讀取或寫入存儲)。

因此,爲了抵消,通常RDBMS將允許您將表分割到多個HDD上,有效地將I/O性能(類似於RAID0的方法)相乘。

添加更多硬盤可提高性能。這可以延續到系統可以支持的最大I/O(或者僅僅是因爲系統不能通過電路推送更多的數據,或者因爲它在獲取數據時需要一點點處理,所以它會成爲CPU綁定的;最佳的是您將會同時使用)

之後,你必須開始在數據庫節點間分配數據的系統。爲此,RDBMS必須支持它,或者應該有一個應用程序層來協調分配任務和合並結果,但通常事情仍然會擴展。

我會說,與512系統,你可以有效地緩存所有萬億記錄(10^12),並取得相對不錯的表現。但是,你真的應該指定你正在尋找什麼樣的表現 - terra-records上的全文搜索與主要運行簡單的讀取和更新之間存在差異。另外,對於某些工作來說,500ms(甚至更多)被認爲是良好的表現,然後對於其他工作來說,這將是可怕的。

相關問題