標籤:重要 插入 程式 關係 避免 增加 SQ rom 記錄
Mysql效能最佳化分析思路:sql查詢最佳化及索引;資料庫表結構;伺服器級最佳化(系統配置;硬體)。
(一、使用索引)
索引是最佳化查詢的最常用也是最有效的方法,一個資料表,尤其是容量很大的表,建立合適的索引,會使查詢的速度提高很大。
1.索引對單個表查詢的影響:不需要逐行搜尋全表尋找匹配的條款,而是可以利用索引
進行尋找。
- 索引對多個表查詢的影響。
如上1,2所述,MySQL 利用索引加速了 WHERE 子句中與條件相配的行的搜尋,或者說
在執行串連時加快了與其他表中的行匹配的行的搜尋。
根據sql查詢語句確定建立哪種類型的索引,如何最佳化查詢
選擇索引列:
a.效能最佳化過程中,選擇在哪個列上建立索引是最重要的步驟之一。可以考慮使用索引的主要有兩種類型的列:在where子句中出現的列,在join子句中出現的列。
b.考慮列中值的分布,索引的列的基數越大,索引的效果越好。
c.使用短索引,如果對字串列進行索引,應該指定一個前置長度,可節省大量索引空間,提升查詢速度。
d.不要過度索引,只保持所需的索引。首先,索引檔案要佔磁碟空間。其次,索引檔案加快了檢索,但增加了插入和刪除,以及更新索引列中的值的時間(即,降低了寫操作的效能),因為寫操作不僅涉及資料行,而且還常常涉及索引。一個表擁有的索引越多,則寫操作的平均效能下降就越大。
(二、資料類型的問題)
1 、使你的資料儘可能小
最基本的最佳化之一是使你的資料(和索引)在磁碟上(並且在記憶體中)佔據的空間儘可能小。
你能用下面的技術使表的效能更好並且使儲存空間最小:
l
a.儘可能地使用最有效(最小)的類型。MySQL有很多節省磁碟空間和記憶體的專業化
類型。
l
b.如果可能使表更小,使用較小的整數類型。例如,MEDIUMINT 經常比 INT 好一
些。
l
c.如果可能,聲明列為 NOT NULL。它使任何事情更快而且你為每列節省一位。注
意如果在你的應用程式中你確實需要 NULL,你應該毫無疑問使用它,只是避免
預設地在所有列上有它。
2 、使用定長列,不使用可變長列
這條準則對被經常修改,從而容易產生片段的表來說特別重要。例如,應該選擇 CHAR
列而不選擇 VARCHAR 列。所要權衡的是使用定長列時,表所佔用的空間更多,但如果
能夠承擔這種空間的耗費,使用定長行將比使用可變長的行處理快得多。
3 、將列定義為 NOT NULL
這樣處理更快,所需空間更少。而且有時還能簡化查詢,因為不需要檢查是否存在特
例 NULL。
4 、考慮使用 ENUM 列
如果有一個只含有限數目的特定值的列,那麼應該考慮將其轉換為 ENUM 列。ENUM
列的值可以更快地處理,因為它們在內部是以數值表示的。
(blob類型與text類型
BLOB是一個二進位大對象,可以容納可變數量的資料。有4種BLOB類型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它們只是可容納值的最大長度不同。
有4種TEXT類型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。這些對應4種BLOB類型,有相同的最大長度和儲存需求。
BLOB 列被視為二進位字串(位元組字串)。TEXT列被視為非二進位字串(字元字串)。BLOB列沒有字元集,並且排序和比較基於列值位元組的數值值。TEXT列有一個字元集,並且根據字元集的 校對規則對值進行排序和比較。
)
5、使用 ANALYSE 過程檢查表列SELECT * FROM student PROCEDURE ANALYSE();相應輸出中有一列是關於表中每列的最佳列類型的建議。
(二、sql查詢的最佳化)
1.使用 EXPLAIN 語句檢查 SQL 語句 EXPLAIN SELECT student.name From student,pet WHERE student.name=pet.owner;
藉助於 EXPLAIN,你可以知道你什麼時候必須為表加入索引以得到一個使用索引找到記錄的更快的SELECT。
(三、)
本節介紹了有關資料表的最佳化技巧,主要內容有,選擇表的類型,開啟盡量少的表,
鎖定表與查詢速度的關係以及如何最佳化表以達到提高查詢速度的目的。
(四、伺服器級的最佳化)
有的伺服器參數直接適用於查詢處理,可將它們開啟。而有的硬體設定問題直接影響查詢處理速度,應該對它們進行調整。
硬體問題:在機器中安裝更多的記憶體。
mysql效能最佳化-自我總結