AG积分

座機: 029-81773686 熱線: 18966895139
網頁制作、網絡營銷、維護推廣、手機網站制作一站式解決方案
十分感謝六年來與我們攜手共進的朋友們、客戶們!
這些Mysql問題你一定要知道(四)
添加時間:2020-04-24  點擊率:246次

40、如何進行SQL優化?(關于后邊的解釋同學們可以進行理解,到時根據自己的理解把大體意思說出來即可)

(1)選擇正確的存儲引擎

以 MySQL為例,包括有兩個存儲引擎 MyISAM 和 InnoDB,每個引擎都有利有弊。


MyISAM 適合于一些需要大量查詢的應用,但其對于有大量寫操作并不是很好。甚至你只是需要update一個字段,整個表都會被鎖起來,而別的進程,就算是讀進程都無法操作直到讀操作完成。另外,MyISAM 對于 SELECT COUNT(*) 這類的計算是超快無比的。


InnoDB 的趨勢會是一個非常復雜的存儲引擎,對于一些小的應用,它會比 MyISAM 還慢。但是它支持“行鎖” ,于是在寫操作比較多的時候,會更優秀。并且,他還支持更多的高級應用,比如:事務。


(2)優化字段的數據類型

記住一個原則,越小的列會越快。如果一個表只會有幾列罷了(比如說字典表,配置表),那么,我們就沒有理由使用 INT 來做主鍵,使用 MEDIUMINT, SMALLINT 或是更小的 TINYINT 會更經濟一些。如果你不需要記錄時間,使用 DATE 要比 DATETIME 好得多。當然,你也需要留夠足夠的擴展空間。


(3)為搜索字段添加索引

索引并不一定就是給主鍵或是唯一的字段。如果在你的表中,有某個字段你總要會經常用來做搜索,那么最好是為其建立索引,除非你要搜索的字段是大的文本字段,那應該建立全文索引。


(4)避免使用Select *從數據庫里讀出越多的數據,那么查詢就會變得越慢。并且,如果你的數據庫服務器和WEB服務器是兩臺獨立的服務器的話,這還會增加網絡傳輸的負載。即使你要查詢數據表的所有字段,也盡量不要用*通配符,善用內置提供的字段排除定義也許能給帶來更多的便利。


(5)使用 ENUM 而不是 VARCHAR

ENUM 類型是非常快和緊湊的。在實際上,其保存的是 TINYINT,但其外表上顯示為字符串。這樣一來,用這個字段來做一些選項列表變得相當的完美。例如,性別、民族、部門和狀態之類的這些字段的取值是有限而且固定的,那么,你應該使用 ENUM 而不是 VARCHAR。


(6)盡可能的使用 NOT NULL

除非你有一個很特別的原因去使用 NULL 值,你應該總是讓你的字段保持 NOT NULL。NULL其實需要額外的空間,并且,在你進行比較的時候,你的程序會更復雜。當然,這里并不是說你就不能使用NULL了,現實情況是很復雜的,依然會有些情況下,你需要使用NULL值。


(7)固定長度的表會更快

如果表中的所有字段都是“固定長度”的,整個表會被認為是 “static” 或 “fixed-length”。例如,表中沒有如下類型的字段:VARCHAR,TEXT,BLOB。只要你包括了其中一個這些字段,那么這個表就不是“固定長度靜態表”了,這樣,MySQL 引擎會用另一種方法來處理。


固定長度的表會提高性能,因為MySQL搜尋得會更快一些,因為這些固定的長度是很容易計算下一個數據的偏移量的,所以讀取的自然也會很快。而如果字段不是定長的,那么,每一次要找下一條的話,需要程序找到主鍵。并且,固定長度的表也更容易被緩存和重建。不過,唯一的副作用是,固定長度的字段會浪費一些空間,因為定長的字段無論你用不用,他都是要分配那么多的空間。


41,為表中得字段選擇合適得數據類型(物理設計)

字段類型優先級: 整形>date,time>enum,char>varchar>blob,text

優先考慮數字類型,其次是日期或者二進制類型,最后是字符串類型,同級別得數據類型,應該優先選擇占用空間小的數據類型


42:存儲時期

Datatime:以 YYYY-MM-DD HH:MM:SS 格式存儲時期時間,精確到秒,占用8個字節得存儲空間,datatime類型與時區無關


Timestamp:以時間戳格式存儲,占用4個字節,范圍小1970-1-1到2038-1-19,顯示依賴于所指定得時區,默認在第一個列行的數據修改時可以自動得修改timestamp列得值


Date:(生日)占用得字節數比使用字符串.datatime.int儲存要少,使用date只需要3個字節,存儲日期月份,還可以利用日期時間函數進行日期間得計算


Time:存儲時間部分得數據

注意:不要使用字符串類型來存儲日期時間數據(通常比字符串占用得儲存空間小,在進行查找過濾可以利用日期得函數)


使用int存儲日期時間不如使用timestamp類型

?
版權所有 ? AG积分宏博網絡,并保留所有權利
客服中心


展開客服