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

首頁 > 數據庫 > MySQL > 正文

詳解MySQL數據庫優化的八種方式(經典必看)

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

引言:

  關于數據庫優化,網上有不少資料和方法,但是不少質量參差不齊,有些總結的不夠到位,內容冗雜。

  偶爾發現了這篇文章,總結得很經典,文章流量也很大,所以拿到自己的總結文集中,積累優質文章,提升個人能力,希望對大家今后開發中也有幫助

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

  MySQL可以很好的支持大數據量的存取,但是一般說來,數據庫中的表越小,在它上面執行的查詢也就會越快。因此,在創建表的時候,為了獲得更好的性能,我們可以將表中字段的寬度設得盡可能小。

  例如,在定義郵政編碼這個字段時,如果將其設置為CHAR(255),顯然給數據庫增加了不必要的空間,甚至使用VARCHAR這種類型也是多余的,因為CHAR(6)就可以很好的完成任務了。同樣的,如果可以的話,我們應該使用MEDIUMINT而不是BIGIN來定義整型字段。

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

  對于某些文本字段,例如“省份”或者“性別”,我們可以將它們定義為ENUM類型。因為在MySQL中,ENUM類型被當作數值型數據來處理,而數值型數據被處理起來的速度要比文本類型快得多。這樣,我們又可以提高數據庫的性能。

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

  MySQL從4.1開始支持SQL的子查詢。這個技術可以使用SELECT語句來創建一個單列的查詢結果,然后把這個結果作為過濾條件用在另一個查詢中。例如,我們要將客戶基本信息表中沒有任何訂單的客戶刪除掉,就可以利用子查詢先從銷售信息表中將所有發出訂單的客戶ID取出來,然后將結果傳遞給主查詢,如下所示:

DELETEFROMcustomerinfoWHERECustomerIDNOTin(SELECTCustomerIDFROMsalesinfo)

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

SELECT*FROMcustomerinfoWHERECustomerIDNOTin(SELECTCustomerIDFROMsalesinfo)

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

SELECT*FROMcustomerinfoLEFTJOINsalesinfoONcustomerinfo.CustomerID=salesinfo.CustomerIDWHEREsalesinfo.CustomerIDISNULL

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南江县| 石泉县| 潜江市| 嵩明县| 教育| 濮阳市| 贵港市| 东乡县| 常宁市| 肥城市| 怀远县| 德兴市| 思茅市| 渝北区| 奎屯市| 搜索| 万全县| 安顺市| 玛曲县| 永清县| 固原市| 孙吴县| 无为县| 霞浦县| 江门市| 马山县| 朝阳县| 三明市| 安阳市| 平潭县| 景东| 河曲县| 孟津县| 南安市| 阿拉善右旗| 逊克县| 北川| 新绛县| 雅安市| 友谊县| 濉溪县|