如何提高mysql數據庫的性能,因爲我的網站託管在共享服務器上,並且由於「查詢太多」而暫停了我的帳戶 「索引」或「緩存「或修剪我的數據庫 我不知道」index「和緩存意味着什麼,以及如何在php 上做到這一點,這要歸功於如何提高MySQL數據庫的性能
回答
您可能寫得不好,或者寫得不好查詢。您能否給我們提供您正在使用的定期運行的查詢的具體示例?
確保 此查詢來獲取最後的3個員額
select * from posts where visible = 1 and date > ($server_date - 86400) and dont_show_in_frontpage = 0 order by votes*1000+((1440 - ($server_date - date))/60)*2+visites*600 desc limit 3
你覺得呢?
所有這些算術的要點是什麼?爲什麼不只是「ORDER BY votes DESC」。此外,每次點擊您的網站時平均運行多少個查詢?這是什麼類型的網站? – Sampson 2009-01-16 20:43:28
謝謝,關於爲什麼查詢很複雜? ,因爲它是一個算法來訂購我的網站上的文章 我的網站是博客聚合器。 我不知道有多少個查詢 - 但我認爲有很多 - 我會嘗試查看 – ahmed 2009-01-16 21:50:49
1.確保您在'日期'列中有一個索引,以便MySQL可以立即忽略舊的行。 2.即使有'投票'索引,計算意味着MySQL無法使用它,所以它必須掃描每行到一個臨時表進行排序,而不僅僅是'最好'3. – bobince 2009-01-18 01:37:28
你不應該選擇*永遠。相反,請只選擇您需要的特定呼叫數據。你在這裏有什麼打算?
order by votes*1000+((1440 - ($server_date - date))/60)2+visites600 desc
感謝您對select * ,希望我儘快更改,謝謝,關於查詢的其餘部分,這是一個算法,以訂購我的網站上的文章,因爲它是博客聚合器。 – ahmed 2009-01-16 21:38:31
有一對夫婦的事情,你可以看看:
- 查詢設計 - 考慮更先進和更快的解決方案
- 硬件 - 在這個問題
- 數據庫扔更好,更快的硬件設計 - 使用指標和實踐良好的數據庫設計
所有這些都更容易說tha完成了,但這是一個開始。
在本地設置應用程序的副本,啓用mysql查詢日誌,並設置xdebug或其他一些分析器。開始收集數據,並測試您的應用程序。有很多指南,以及關於如何優化事物的書籍。重要的是你花時間測試,並收集數據第一所以你優化正確的事情。
使用您收集的數據嘗試並減少每個頁面視圖的查詢數量,理想情況下,您應該能夠在少於5-10個查詢中獲得所需的所有內容。
看看日誌,看看你是否要求同樣的事情兩次。在您的代碼的一部分中請求記錄並在幾行後從數據庫再次請求記錄是一個好主意,除非您確定該值可能已更改。
查找嵌入循環中的查詢,並嘗試對它們進行重構,以便進行單個查詢並簡單地循環結果。
select *你提到使用是一個跡象表明你可能做錯了什麼。你可能應該列出你明確需要的字段。檢查這個網站或谷歌很多關於爲什麼select * is evil很好的論點。
開始查看您的查詢,然後在其上使用explain。對於經常使用的查詢,請確保它們使用了良好的索引,而不是進行全表掃描。調整開發數據庫和測試的索引。
首先,解僱你的主人,讓共同主持進入你完全控制的環境中,並有機會能夠正常調整。
在您的實驗室中複製該環境,理想情況下使用與生產相同的硬件;這包括RAID控制器等。
我有沒有提到你需要一個RAID控制器。是的你是。沒有一個 - 你需要一個電池支持的緩存才能獲得不錯的寫入性能。如果你沒有一個,每個寫入都需要物理地擊中光盤,這對性能來說是毀滅性的。無論如何,回到性能表現,一旦你的機器擁有與你實驗室生產相同規格的RAID控制器(顯然是相同的光盤),你可以嘗試調整一些東西。
更多的RAM通常是實現更好性能的最便宜的方式 - 確保你已經配置了MySQL來使用它 - 這意味着調整存儲引擎特定的參數。
我在這裏假設你至少有100G的數據;如果不是,只需購買足夠的內存,讓您的整個數據庫適用於內存,然後讀取性能即可解決。
,其他人已經提到,如優化查詢,並添加索引軟件變化也有幫助,但只有一次,你已經有了一個發展的硬件環境,使您能夠有效地做績效工作 - 你的應用程序,即衡量業績有意義的 - 這意味着真正的硬件(不是VM),這與生產中使用的硬件環境一致。
哦,是的 - 一件事 - 千萬別想在32位操作系統上部署的數據庫服務器,這是很好的RAM的毀滅性的浪費。
對數據庫表進行索引以加快查詢速度。如果你不知道這意味着什麼你沒有。至少你應該在每個foriegn鍵和大多數在你的查詢的where子句中經常使用的fileds上有索引。主鍵應該有索引自動假設你設置他們開始我不會發現不知道索引是什麼的人。你的表是否正常化?
順便說一句,既然你在做數學的劃分(爲什麼我沒有線索),你應該谷歌整數數學。你可能不會得到正確的結果。
什麼指標是:一個數據庫表的
覺得作爲一個庫 - 你的書(記錄),每一個相關的數據(作者姓名,出版社,出版日期,ISBN大集合,內容)。還假設這是一個非常天真的圖書館,所有圖書都按照ISBN(主鍵)排列。就像這些書只能有一個物理順序一樣,一個數據庫表只能有一個主鍵索引。
現在想象一下有人來到圖書管理員(數據庫程序)並說:「我想知道圖書館裏有多少張諾拉羅伯茨書籍。要回答這個問題,圖書管理員必須走過道,看看圖書館裏的每本書,這本書很慢。如果圖書管理員得到這樣的許多請求,那麼值得他花時間根據作者姓名(索引名稱)設置卡片目錄 - 然後他可以通過參考目錄而不是走上書架來更快地回答這些問題。從本質上講,索引建立了書的「另類排序」 - 它將它們視爲按照作者的字母順序排序。
請注意,1)設置目錄需要時間,2)目錄在庫中佔用額外的空間,3)它增加了向圖書館添加圖書的過程 - 而不是僅僅粘着一本書在架子上,圖書管理員還必須填寫索引卡並將其添加到目錄中。以同樣的方式,在數據庫字段中添加索引可以加快查詢速度,但索引本身需要存儲空間並會降低插入速度。出於這個原因,您應該只根據需要創建索引 - 索引您很少搜索的字段沒有意義。
什麼緩存是:
如果館員有很多人進來,並一遍又一遍地問同樣的問題,它可能是值得他的時間來寫答案下來前臺。他可以簡單地說:「這是我給最後一個提出這個問題的人的答案」,而不是檢查堆棧或目錄。
在您的腳本中,這可能適用於不同的方式。您可以存儲數據庫查詢的結果或計算結果或部分呈現的網頁;您可以將其存儲到輔助數據庫表,文件或會話變量或memcached等內存服務中。您可以存儲預分析的數據庫查詢,隨時可以運行。一些類似Smarty的圖書館會自動爲您存儲部分或全部頁面。通過存儲結果並重新使用它,您可以避免多次執行相同的工作。
在任何情況下,您都必須擔心答案的有效期。如果圖書館收到新書,該怎麼辦?可以使用可能會過五分鐘的答案嗎?一天過期怎麼樣?
緩存是非常特定於應用程序的;你將不得不考慮你的數據的含義,改變的頻率,計算的花費多少,結果的需要頻率。如果數據變化緩慢,則每次進行更改時最好重新計算並存儲結果;如果它經常變化但並不重要,則只有在緩存值超過特定年齡時才更新即可。
- 1. 提高mysql數據庫性能
- 2. 如何提高數據庫的性能?
- 3. 如何提高mysql數據庫插入的性能
- 4. 提高了將數據寫入MYSQL數據庫的性能
- 5. 提高數據庫訪問的性能
- 6. 如何從數據庫移動此數據以提高性能
- 7. 提高SQL Server數據庫性能
- 8. 如何提高mysql數據庫的安全性
- 9. 如何提高大數據MYSQL查詢的性能?
- 10. 如何提高性能的MySQL
- 11. 如何提高mysql中的select性能?
- 12. 如何提高mysql查詢的性能?
- 13. 如何提高MYSQL查詢的性能?
- 14. Python - 如何提高數據幀性能?
- 15. 如何提高大數據性能?
- 16. 如何提高使用QT的sqlite3數據庫的性能?
- 17. 如何提高android的SQLite數據庫的性能
- 18. 如何提高數據庫模式創建的性能?
- 19. 如何提高SQLite數據庫的性能?
- 20. 如何提高Java的數據庫更新性能?
- 21. 如何提高許多數據庫插入的性能?
- 22. 如何提高使用JDBC導入數據庫的性能?
- 23. 提高MySQL的性能
- 24. 提高數據表性能
- 25. 如何提高MySQL INSERT和UPDATE性能?
- 26. MySQL索引 - 如何提高性能?
- 27. 如何提高SQL Server數據庫性能?
- 28. 如何使用CDN數據庫來提高性能
- 29. 如何提高性能:數據庫還是文本文件?
- 30. 從Web服務處理數據庫 - 如何提高性能?
http://neranjara.org/article/title/MySQL_Performance – Nathacof 2009-01-18 05:39:22