国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL數據庫性能進行優化三大絕招

2024-07-24 12:38:21
字體:
來源:轉載
供稿:網友

以下的文章主要介紹的是對MySQL數據庫性能進行優化的的幾大絕招,其中包括選取最適用的字段屬性,使用連接(JOIN)來代替子查詢(Sub-Queries),使用聯合 (UNION)來代替手動創建的臨時表的內容介紹。

1.選取最適用的字段屬性

MySQL可以很好的支持大數據量的存取,但是一般說來,數據庫中的表越小,在它上面執行的查詢也就會越快。因此,在創建表的時候,為了獲得更好的性能,我們可以將表中字段的寬度設得盡可能小。例如,在定義郵政編碼這個字段時,如果將其設置為CHAR(255),顯然給數據庫增加了不必要的空間,甚至使用VARCHAR這種類型也是多余的,因為CHAR(6)就可以很好的完成任務了。同樣的,如果可以的話,我們應該使用MEDIUMINT而不是BIGIN來定義整型字段。

另外一個提高效率的方法是在可能的情況下,應該盡量把字段設置為NOT NULL,這樣在將來執行查詢的時候,數據庫不用去比較NULL值。

對于某些文本字段,例如“省份”或者“性別”,我們可以將它們定義為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 NOT in (SELECT CustomerID FROM salesinfo)

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

  1. SELECT * FROM customerinfo LEFT JOIN salesinfo ON customerinfo.CustomerID=salesinfo.CustomerID WHERE salesinfo.CustomerID IS NULL 

連接(JOIN)之所以更有效率一些,是因為 MySQL不需要在內存中創建臨時表來完成這個邏輯上的需要兩個步驟的查詢工作.

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

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

  1. SELECT Name, Phone FROM client UNION SELECT Name, BirthDate FROM author UNION SELECT Name, Supplier FROM product 
  2. --Vevb.com

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邛崃市| 陕西省| 乌鲁木齐县| 岢岚县| 阳春市| 姚安县| 延庆县| 安塞县| 永昌县| 通榆县| 泾源县| 潜山县| 琼中| 宁海县| 大足县| 陵水| 江川县| 临汾市| 永泰县| 孝义市| 宽城| 汝城县| 兴安盟| 凤翔县| 永胜县| 丽水市| 雅江县| 昆山市| 成都市| 石泉县| 韶山市| 潼南县| 星子县| 桦川县| 乌兰察布市| 邛崃市| 安陆市| 长沙市| 东兰县| 苍溪县| 济南市|