從資料庫、代碼和伺服器對PHP網站Mysql做效能最佳化

來源:互聯網
上載者:User

標籤:訪問量   代碼最佳化   寫法   效能最佳化   共用鎖定   函數   select   空間   好處   

資料庫最佳化是PHP面試幾乎都會被問到的事情,也是我們工作中應該注意的事情,當然,如果是小網站無所謂最佳化不最佳化,網站訪問量大了自然會暴漏資料庫的瓶頸,這個瓶頸是各方面問題綜合導致的,下面我們來做下資料庫最佳化的總結。一:對資料庫最佳化1.建立索引對於查詢佔主要的應用來說,索引顯得尤為重要。很多時候效能問題很簡單的就是因為我們忘了添加索引而造成的,或者說沒有添加更為有效索引導致。如果不加索引的話,那麼尋找任何哪怕只是一條特定的資料都會進行一次全表掃描,如果一張表的資料量很大而合格結果又很少,那麼不加索引會引起致命的效能下降。2.選取最適用的欄位屬性MySQL可以很好的支援大資料量的存取,但是一般說來,資料庫中的表越小,在它上面執行的查詢也就會越快。因此,在建立表的時候,為了獲得更好的效能,我們可以將表中欄位的寬度設得儘可能小。A、資料類型盡量用數字型,數字型的比較比字元型的快很多。B、 資料類型盡量小,這裡的盡量小是指在滿足可以預見的未來需求的前提下的。C、 盡量不要允許NULL,除非必要,可以用NOT NULL+DEFAULT代替。D、少用TEXT和IMAGE,二進位欄位的讀寫是比較慢的,而且,讀取的方法也不多,大部分情況下最好不用。E、 自增欄位要慎用,不利於資料移轉3.設計正常化表,消除資料冗餘4.適當的冗餘,增加計算資料行滿足範式的表一定是正常化的表,但不一定是最佳的設計。很多情況下會為了提高資料庫的運行效率,常常需要降低範式標準:適當增加冗餘,達到以空間換時間的目的。二:對代碼最佳化1.開啟查詢快取大多數的MySQL伺服器都開啟了查詢快取。這是提高性最有效方法之一,而且這是被MySQL的資料庫引擎處理的。當有很多相同的查詢被執行了多次的時候,這些查詢結果會被放到一個緩衝中,這樣,後續的相同的查詢就不用動作表而直接存取緩衝結果了。 這裡最主要的問題是,對於程式員來說,這個事情是很容易被忽略的。因為,我們某些查詢語句會讓MySQL不使用緩衝。

/ 查詢快取不開啟

$r = mysql_query(“SELECT username FROM user WHERE signup_date >= CURDATE()”);

// 開啟查詢快取

$today = date(“Y-m-d”);

$r = mysql_query(“SELECT username FROM user WHERE signup_date >= ‘$today‘”);

      上面兩條SQL語句的差別就是 CURDATE() ,MySQL的查詢快取對這個函數不起作用。所以,像 NOW() 和 RAND() 或是其它的諸如此類的SQL函數都不會開啟查詢快取,因為這些函數的返回是會不定的易變的。所以,你所需要的就是用一個變數來代替MySQL的函數,從而 開啟緩衝。2.最佳化查詢語句 統一SQL語句的寫法,空格、大小寫保持整站一致。盡量避免使用select *,返回無用的欄位會降低查詢效率。不要把SQL語句寫得太複雜,如果語句長可以將一個Select語句的結果作為子集,然後從該子集中再進行查詢,這種一層嵌套語句還是比較常見的,但是根據經驗,超過3層嵌套,查詢最佳化工具就很容易給出錯誤的執行計畫。     使用暫存資料表暫存結果,簡化SQL語句的重要方法就是採用暫存資料表暫存中間結果,但是,暫存資料表的好處遠遠不止這些,將臨時結果暫存在暫存資料表,後面的查詢就在tempdb中了,這可以避免程式中多次掃描主表,也大大減少了程式執行中“共用鎖定”阻塞“更新鎖定”,減少了阻塞,提高了並發效能。盡量避免使用in 和not in,會導致資料庫引擎放棄索引進行全表掃描。盡量避免使用or,會導致資料庫引擎放棄索引進行全表掃描。盡量避免進行null值的判斷,會導致資料庫引擎放棄索引進行全表掃描。盡量避免在where條件中等號的左側進行運算式、函數操作,會導致資料庫引擎放棄索引進行全表掃描。減少跨庫查詢和大表串連操作(分割你的表,減小表尺寸)。預存程序、視圖、函數的適當使用。三:對硬體最佳化1.提升頻寬頻寬越大,訪問速度越快。2.當資料足夠快時,CPU可能出現瓶頸,增加cpu的核心數或者cpu個數3.I/O瓶頸一般發生在工作所需的資料遠遠超過有效記憶體容量時,這時候我們就用SSD硬碟代替普通磁碟,增加伺服器記憶體;
本人部落格:從資料庫、代碼和伺服器對PHP網站Mysql做效能最佳化

從資料庫、代碼和伺服器對PHP網站Mysql做效能最佳化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.