1. 程式人生 > >mysql優化和sql語句優化總結

mysql優化和sql語句優化總結

結構 沒有 sele 大量 unsigned 他還 判斷 pla 可能

mysql性能優化

1、 EXPLAIN 你的 SELECT 查詢。使用 EXPLAIN 關鍵字可以讓你知道MySQL是如何處理你的SQL語句的。這可以幫你分析你的查詢語句或是表結構的性能瓶頸。

2、為搜索字段建索引,一般來說,應該在這些列 上創建索引,例如:

  在作為主鍵的列上,強制該列的唯一性和組織表中數據的排列結構;

  在經常用在連接的列上,這 些列主要是一些外鍵,可以加快連接的速度;

  在經常需要根據範圍進行搜索的列上創建索引,因為索引已經排序,其指定的範圍是連續的; 在經常需要排序的列上創建索引,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間;

  在經常使用在WHERE子句中的列上面創建索引,加快條件的判斷速度。

3、對於某些值在特定範圍的值存儲(例如:性別),字段類型使用 ENUM 而不是 VARCHAR。

4、從 PROCEDURE ANALYSE() 取得建議,只有表中有實際的數據,這些建議才會變得有用,在sql語句後面加上PROCEDURE ANALYSE()。

5、盡可能的使用 NOT NULL,除非你有一個很特別的原因去使用 NULL 值,你應該總是讓你的字段保持 NOT NULL。

6、把IP地址存成 UNSIGNED INT。

7、固定長度的表會更快,盡量少用varchar。

8、垂直分割,把不常用的字段單獨成表。

9、數據量越小的列會越快,如果一個表只會有幾列罷了(比如說字典表,配置表),那麽,我們就沒有理由使用 INT 來做主鍵,使用 MEDIUMINT, SMALLINT 或是更小的 TINYINT 會更經濟一些,當然,你也需要留夠足夠的擴展空間。

10、選擇正確的存儲引擎,MyISAM 適合於一些需要大量查詢的應用,但其對於有大量寫操作並不是很好。InnoDB 的趨勢會是一個非常復雜的存儲引擎,對於一些小的應用,它會比 MyISAM 還慢。他是它支持“行鎖” ,於是在寫操作比較多的時候,會更優秀。並且,他還支持更多的高級應用,比如:事務。

sql語句性能優化

1、能用inner join連接盡量使用inner join連接,一種簡單的優化就是用innerjoin的方法來代替子查詢;使用JOIN時候,應該用小的結果驅動大的結果(left join 左邊表結果盡量小,如果有條件應該放到左邊先處理,right join同理反向),同時盡量把牽涉到多表聯合的查詢拆分多個query(多個表查詢效率低,容易鎖表和阻塞)。

2、避免因sql語句不當而致使索引無效的情況,常見的有:

  在索引列進行運算或者使用函數導致索引失效;

  在sql中使用 <> 、not in 、not exist、!=,or,like "%_" 百分號在前,where後使用IS NULL、IS NOT NULL或者使用函數,會使索引失效。

3、limit千萬級分頁的時候優化(使用between and)而不是limit m,n。

4、使用批量插入節省交互(最好是使用存儲過程)

5、避免sql語句中傳參和數據庫表中字段數據類型不一致

6、分組統計可以禁止排序,ORDER BY NULL禁止排序,禁止不必要的ORDER BY排序

7、當只要一行數據時使用 LIMIT 1,你已經知道結果只會有一條結果或者只需要一條數據,加上 LIMIT 1 可以增加性能。

mysql優化和sql語句優化總結