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

2021-07-02 12:40:06 字數 1827 閱讀 4451

[收藏]

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

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

2.使用連線(join)來代替子查詢(sub-queries)

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

delete from customerinfo

where customerid not

in(select customerid from salesinfo )

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

select

*from

customerinfo

where

customerid

notin

(select

customerid

from

salesinfo )

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

select

*from

customerinfo

left

join

salesinfoon customerinfo.customerid

=salesinfo.

customerid

where

salesinfo.customerid

isnull

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

3.使用聯合(union)來代替手動建立的臨時表

mysql 從 4.0 的版本開始支援 union 查詢,它可以把需要使用臨時表的兩條或更多的 select 查詢合併的乙個查詢中。在客戶端的查詢會話結束的時候,臨時表會被自動刪除,從而保證資料庫整齊、高效。使用 union 來建立查詢的時候,我們只需要用 union作為關鍵字把多個 select 語句連線起來就可以了,要注意的是所有 select 語句中的字段數目要想同。下面的例子就演示了乙個使用 union的查詢。

select

name, phone

from

client

unionselect name, birthdate

from

authorunion

select

name, supplier

from

product

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

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

效能優化 MySQL資料庫優化

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

MySQL 資料庫效能優化之(三)索引優化

大家都知道索引對於資料訪問的效能有非常關鍵的作用,都知道索引可以提高資料訪問效率。為什麼索引能提高資料訪問效能?他會不會有 是不是索引建立越多,效能就越好?到底該如何設計索引,才能最大限度的發揮其效能?這篇文章主要是帶著上面這幾個問題來做乙個簡要的分析,同時排除了業務場景所帶來的特殊性,請不要糾結業...