首頁  >  文章  >  資料庫  >  mysql中select和where子句最佳化的總結

mysql中select和where子句最佳化的總結

不言
不言轉載
2019-01-19 10:18:553634瀏覽

這篇文章帶給大家的內容是關於mysql中select和where子句優化的總結,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

資料庫最佳化:

1.可以在單一SQL語句,整個應用程序,單一資料庫伺服器或多個聯網資料庫伺服器的層級進行最佳化
2.資料庫效能取決於資料庫層級的幾個因素,例如表,查詢和配置設定
3.在資料庫層級進行最佳化,在硬體層級進行最佳化,平衡可攜性和效能
4.合適的結構,合適的資料類型;執行頻繁更新的應用程式大量表(少列);分析大量資料的應用程式少量表(多列);選擇合適的儲存引擎和索引;
5.壓縮適用於InnoDB表的各種工作負載,以及只讀MyISAM表
6.選擇合適的鎖定策略;InnoDB儲存引擎可以處理大多數鎖定問題
7.配置的主要記憶體區域是InnoDB緩衝池和MyISAM密鑰緩存。
8.優化select語句,這方面技巧同樣適用於其他帶where的delete語句等,在where子句的列上設定索引;索引對於引用多個列如join和外鍵尤其重要

#select where子句最佳化:

1.調整查詢的結構,例如函數呼叫,為結果集中的每一行只呼叫一次,為表中的每一行只呼叫一次
2.減少查詢中的全表掃描數
3.定期使用ANALYZE TABLE語句使表統計資訊保持最新
4.了解特定於每個表的存儲引擎的調優技術,索引技術和配置參數
5.最佳化InnoDB表的單一查詢事務
6.透過閱讀EXPLAIN計劃並調整索引,WHERE子句,連接子句等來調查特定查詢的內部詳細資訊
7.調整MySQL用於快取的記憶體區域的大小和屬性。透過有效使用InnoDB緩衝池,MyISAM金鑰快取和MySQL查詢快取
8.where條件,去掉不必要的括號,恆定折疊,恆定條件去除,減少不必要的邏輯
9.被索引使用的常數表達式只計算一次
10.count(*)直接從表格資訊查詢;當只有一張表時,not null表達式也是這樣
11.如果不使用GROUP BY或聚合函數(COUNT (),MIN()等),HAVING將與WHERE合併
12.常量表,只有一行或空表;where子句作用在primary key或unique索引上
13.如果ORDER BY和GROUP BY子句中的所有列都來自同一個表,則在連接時首選該表
14.如果order by子句和group by子句不一樣,或來自不同的表,則會建立臨時表
15.如果使用SQL_SMALL_RESULT修飾符,MySQL將使用記憶體中的臨時表
16.MySQL甚至無需諮詢資料檔案即可只從索引中讀取行
17.在輸出每一行之前,將跳過與HAVING子句不符的行

以下表被用作常數量表:

SELECT * FROM t WHERE primary_key=1;
SELECT * FROM t1,t2  
WHERE t1.primary_key=1 AND t2.primary_key=t1.id;

以下查詢運行速度非常快:

SELECT COUNT(*) FROM tbl_name;
SELECT MIN(key_part1),MAX(key_part1) FROM tbl_name;
SELECT MAX(key_part2) FROM tbl_name
  WHERE key_part1=constant;
SELECT ... FROM tbl_name
  ORDER BY key_part1,key_part2,... LIMIT 10;
SELECT ... FROM tbl_name
  ORDER BY key_part1 DESC, key_part2 DESC, ... LIMIT 10;
假設索引列是數值類型,以下查詢僅用到了索引樹:
SELECT key_part1,key_part2 FROM tbl_name WHERE key_part1=val;
SELECT COUNT(*) FROM tbl_name
  WHERE key_part1=val1 AND key_part2=val2;
  SELECT key_part2 FROM tbl_name GROUP BY key_part1;

以下查詢使用索引按排序順序取回資料,不需要單獨排序

SELECT ... FROM tbl_name
  ORDER BY key_part1,key_part2,... ;
SELECT ... FROM tbl_name
   ORDER BY key_part1 DESC, key_part2 DESC, ... ;

以上是mysql中select和where子句最佳化的總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除