優化設計提升sql類數據庫的性能

前言javascript

在一個項目中,技術的統一性是最重要的,數據庫的設計則是重點中的重點。NoSQL 是目前最流行的數據庫,可是其實用性和功能性遠不如sql數據庫。php

實際不少SQL數據庫被詬病的性能問題大可能是源於程序員的不合理設計,一個好的設計可使sql類數據庫提升幾倍的性能。java

1.細節的優化mysql

字段儘可能設置爲not null 。程序員

規範字段大小,越小越好。redis

表名規範前綴。sql

一個表儘可能儲存一個對象。數據庫

char永遠比varchar更高效。後端

timestamp 比datetime小一倍。緩存

避免字串ID。

單條查詢最後用limit 1。

不用mysql內置函數,由於不會創建查詢緩存。

使用ip而不是域名做爲數據庫的路徑,避免dns解析。

2.使用sql內置功能

例如trigger,procedure,event...等等,能夠有效減小後端代碼的運用,可是不適合處理高觸發的項目。

3.選擇適合的存儲引擎

最多見的就是InnoDB 與 MyISAM. 二者區別請自行百度。

4.將數據保存至內存中

從內存中讀取數據,最大限度減小磁盤的操做,相關內容會在後面詳細解釋。

5.提升磁盤讀寫速度

6.充分使用索引 INDEX

mysql> DROP INDEX index_name ON tab;  //添加index
mysql> ALTER TABLE tab DROP INDEX index_name ; //刪除index

7.使用內存磁盤  

如今基礎設施都過硬,因此能夠將sql 目錄遷移到內存磁盤上。

8.讀寫分離設計

隨着系統變得愈來愈龐大,特別是當它們擁有不好的SQL時,一臺數據庫服務器一般不足以處理負載。可是多個數據庫意味着重複,除非你對數據進行了分離。更通常地,這意味着創建主/從副本系統,其中程序會對主庫編寫全部的Update、Insert和Delete變動語句,而全部Select的數據都讀取自從數據庫(或者多個從數據庫)。

儘管概念上很簡單,可是想要合理、精確地實現並不容易,這可能須要大量的代碼工做。所以,即使在開始時使用同一臺數據庫服務器,也要儘早計劃在php中使用分離的DB鏈接來進行讀寫操做。若是正確地完成該項工做,那麼系統就能夠擴展到2臺、3臺甚至12臺服務器,並具有高可用性和穩定性。

9.使用memcache或者redis

 以前的博客有相關的介紹。

10.SQL數據庫分散式佈局

將數據庫分散到多個服務器上,分擔數據庫工做壓力。

相關文章
相關標籤/搜索