MySQL資料庫效能進行優化的的幾大絕招

2021-08-30 20:23:43 字數 1825 閱讀 8818

以下的文章主要介紹的是對mysql資料庫效能進行優化的的幾大絕招,其中包括選取最適用的字段屬性,使用連線(join)來代替子查詢(sub-queries),使用聯合 (union)來代替手動建立的臨時表的內容介紹。

[color=red][b]mysql資料庫效能優化1、選取最適用的字段屬性[/b][/color]

另外乙個提高效率的方法是在可能的情況下,應該盡量把字段設定為not null,這樣在將來執行查詢的時候,資料庫不用去比較null值。

對於某些文字字段,例如「省份」或者「性別」,我們可以將它們定 義為enum型別。因為在mysql中,enum型別被當作數值型資料來處理,而數值型資料被處理起來的速度要比文字型別快得多。這樣,我們又可以提高資料庫的效能。

[color=red][b]mysql資料庫效能優化2、使用連線(join)來代替子查詢(sub-queries)[/b][/color]

mysql從 4.1開始支援sql的子查詢。這個技術可以使用 select語句來建立乙個單列的查詢結果,然後把這個結果作為過濾條件用在另乙個查詢 中。例如,我們要將客戶基本資訊表中沒有任何訂單的客戶刪除掉,就可以利用子查詢先從銷售資訊表中將所有發出訂單的客戶id取出來,然後將結果傳遞給主查 詢,如下所示:

delete from customerinfo   

where customerid not in (select customerid from salesinfo )

使用子查詢可以一次性的完成很多邏輯上需要多個步驟才能完成的sql操作,同時也可以避免事務或者表鎖死,並且寫起來也很容易。但是,有些情況下,子查詢可以被更有效率的連線(join)替代。例如,假設我們要將所有沒有訂單記錄的使用者取出來,可以用下面這個查詢完成:

select * from customerinfo   

where customerid not in (select customerid from salesinfo )

如果使用連線(join)來完成這個查詢工作,速度將會快很多。尤其是當salesinfo表中對customerid建有索引的話,效能將會更好,查詢如下:

select * from customerinfo   

left join salesinfoon customerinfo.customerid=salesinfo.

customerid

where salesinfo.customerid is null

連線(join)之所以更有效率一些,是因為 mysql不需要在記憶體中建立臨時表來完成這個邏輯上的需要兩個步驟的查詢工作。

[color=red][b]mysql資料庫效能優化3、使用聯合 (union)來代替手動建立的臨時表[/b][/color]

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

MySQL資料庫效能進行優化三大絕招

收藏 以下的文章主要介紹的是對mysql資料庫效能進行優化的的幾大絕招,其中包括選取最適用的字段屬性,使用連線 join 來代替子查詢 sub queries 使用聯合 union 來代替手動建立的臨時表的內容介紹。1.選取最適用的字段屬性對於某些文字字段,例如 省份 或者 性別 我們可以將它們定義...

效能優化 MySQL資料庫優化

可以從哪幾個方面進行資料庫的優化?如下圖所示 a sql及索引優化 根據需求寫出良好的sql,並建立有效的索引,實現某一種需求可以多種寫法,這時候我們就要選擇一種效率最高的寫法。這個時候就要了解sql優化 b 資料庫表結構優化 根據資料庫的正規化,設計表結構,表結構設計的好直接關係到寫sql語句。c...

資料庫效能優化 MySQL

序 即使有較長的快取有效期和較理想的快取命中率,但是快取的建立和快取過期後的重建都是需要訪問資料庫的。對資料庫寫操作不是很容易引入快取策略。11.1 檢視資料庫狀態 可以通過show status show innodb status 來檢視mysql資料庫的狀態,使用mysqlreport這個第三...