MySql數據庫優化能夠從哪幾個方面進行?

一、選取最適用的字段屬性

MySQL能夠很好的支持大數據量的存取,可是通常說來,數據庫中的表越小,在它上面執行的查詢也就會越快。所以,在建立表的時候,爲了得到更好的性能,咱們能夠將表中字段的寬度設得儘量小。html

例如,在定義郵政編碼這個字段時,若是將其設置爲CHAR(255),顯然給數據庫增長了沒必要要的空間,甚至使用VARCHAR這種類型也是多餘的,由於CHAR(6)就能夠很好的完成任務了。一樣的,若是能夠的話,咱們應該使用MEDIUMINT而不是BIGIN來定義整型字段。數據庫

另一個提升效率的方法是在可能的狀況下,應該儘可能把字段設置爲NOTNULL,這樣在未來執行查詢的時候,數據庫不用去比較NULL值。
對於某些文本字段,例如「省份」或者「性別」,咱們能夠將它們定義爲ENUM類型。由於在MySQL中,ENUM類型被看成數值型數據來處理,而數值型數據被處理起來的速度要比文本類型快得多。這樣,咱們又能夠提升數據庫的性能。性能

 

 

 ----------------------------大數據

二、使用鏈接(JOIN)來代替子查詢(Sub-Queries)

MySQL從4.1開始支持SQL的子查詢。這個技術可使用SELECT語句來建立一個單列的查詢結果,而後把這個結果做爲過濾條件用在另外一個查詢中。優化

使用子查詢能夠一次性的完成不少邏輯上須要多個步驟才能完成的SQL操做,同時也能夠避免事務或者表鎖死,而且寫起來也很容易。可是,有些狀況下,子查詢能夠被更有效率的鏈接(JOIN)..替代。例如,假設咱們要將全部沒有訂單記錄的用戶取出來,能夠用下面這個查詢完成:編碼

SELECT * FROM  customerinfo.net

WHERE CustomerID NOT in(SELECT CustomerID FROM salesinfo)3d

若是使用鏈接(JOIN)..來完成這個查詢工做,速度將會快不少。尤爲是當salesinfo表中對CustomerID建有索引的話,性能將會更好,查詢以下:code

SELECT * FROM customerinfohtm

LEFT JOIN salesinfo ON customerinfo.CustomerID = salesinfo.CustomerID

WHERE salesinfo.CustomerID IS NULL

鏈接(JOIN)..之因此更有效率一些,是由於MySQL不須要在內存中建立臨時表來完成這個邏輯上的須要兩個步驟的查詢工做。

 

建立索引的原則:http://blog.csdn.net/csdnones/article/details/50412603

------------------

三、使用聯合(UNION)來代替手動建立的臨時表

MySQL從4.0的版本開始支持union查詢,它能夠把須要使用臨時表的兩條或更多的select查詢合併的一個查詢中。在客戶端的查詢會話結束的時候,臨時表會被自動刪除,從而保證數據庫整齊、高效。使用union來建立查詢的時候,咱們只須要用UNION做爲關鍵字把多個select語句鏈接起來就能夠了,要注意的是全部select語句中的字段數目要想同。下面的例子就演示了一個使用UNION的查詢。

SELECT Name,Phone FROM client UNION

SELECT Name,BirthDate FROM author UNION

SELECT Name,Supplier FROM product

表:

 

----------------------------

數據庫優化:

https://www.cnblogs.com/cy163/archive/2008/12/25/1362145.html

相關文章
相關標籤/搜索