標籤:
合理的建立索引的建議:
(1) 越小的資料類型通常更好:越小的資料類型通常在磁碟、記憶體和CPU緩衝中都需要更少的空間,處理起來更快。
(2) 簡單的資料類型更好:整型資料比起字元,處理開銷更小,因為字串的比較更複雜。在MySQL中,應該用內建的日期和時間資料類型,而不是用字串來儲存時間;以及用整數資料型別儲存IP地址。
(3) 盡量避免NULL:應該指定列為NOT NULL,除非你想儲存NULL。在MySQL中,含有空值的列很難進行查詢最佳化,因為它們使得索引、索引的統計資訊以及比較運算更加複雜。你應該用0、一個特殊的值或者一個空串代替空值
這部分是關於索引和寫SQL語句時應當注意的一些瑣碎建議和注意點。
1. 當結果集只有一行資料時使用LIMIT 1
2. 避免SELECT *,始終指定你需要的列
從表中讀取越多的資料,查詢會變得更慢。他增加了磁碟需要操作的時間,還是在資料庫伺服器與WEB伺服器是獨立分開的情況下。你將會經曆非常漫長的網路延遲,僅僅是因為資料不必要的在伺服器之間傳輸。
3. 使用串連(JOIN)來代替子查詢(Sub-Queries)
串連(JOIN).. 之所以更有效率一些,是因為MySQL不需要在記憶體中建立暫存資料表來完成這個邏輯上的需要兩個步驟的查詢工作。
4. 使用ENUM、CHAR 而不是VARCHAR,使用合理的欄位屬性長度
5. 儘可能的使用NOT NULL
6. 固定長度的表會更快
7. 拆分大的DELETE 或INSERT 語句
8. 查詢的列越小越快
Where條件
在查詢中,WHERE條件也是一個比較重要的因素,盡量少並且是合理的where條件是很重要的,盡量在多個條件的時候,把會提取盡量少資料量的條件放在前面,減少後一個where條件的查詢時間。
有些where條件會導致索引無效:
Ø where子句的查詢條件裡有!=,MySQL將無法使用索引。
Ø where子句使用了Mysql函數的時候,索引將無效,比如:select * from tb where left(name, 4) = ‘xxx’
Ø 使用LIKE進行搜尋匹配的時候,這樣索引是有效:select * from tbl1 where name like ‘xxx%’,而like ‘%xxx%’ 時索引無效
mysql 的簡單最佳化