Mysql學習筆記(二) 查詢效能優化 一

2021-08-08 21:30:41 字數 1254 閱讀 1131

1.只查詢需要的資料。

這個意思是指不要做返回大量結果然後在應用層進行篩選然後只選擇了一部分。比如需要查詢記錄的前10條,返回了1000條,然後選擇了10條就關閉了結果集。這樣做會使得資源浪費在網路資料傳輸上面。

2.多表關聯返回需要的列

多表關聯的時候切記不要返回全部的列,選擇需要的列返回,而不是簡單的使用*來返回全部的列,多餘的列都是沒用的資料。我們只要取需要的列。理由同上。

3.總是取出全部的列

索引一章裡面也談到過,使用*會使得優化器無法完成覆蓋索引的優化,如果沒必要的話不要返回全部的列。

4.重複查詢相同的資料

重複查詢不宜變的資料也是不必要的,可以把這份資料放在緩衝裡面。

## 使用explain命令 ##

我們可以通過explain來檢視當前的select語句的屬性,包括type,rows,extra等參考資料幫助完成判斷是否掃瞄了額外的行。

我們一般可以建立索引來減少需要掃瞄的行數,但是我們雖然可以建立索引,但是怎麼使用索引將會造成不同的效能差異。我們一般使用where來過濾資料,而使用where的方式從快到慢大概有三種:

1.在索引中使用where來過濾不必要的資料。這個是正確使用索引的基本,畢竟索引的目的便是過濾不必要的資料。

2.使用覆蓋索引來獲得資料。這個是指在索引中儲存的字段資料來作為查詢的結果返回,這個是覆蓋索引的定義,避免了回表拉取資料的開銷,用好了是很好的一種手段。

3.讀取資料,然後在mysql伺服器層來過濾資料。

我們來判斷使用索引是否合理可以直觀的從上面提到額explain所獲得欄位值來判斷。如果掃瞄的行rows和實際返回的行差距很大,那麼一般都是索引使用的有問題。

切分成多個簡單的查詢

1.1在應用層把乙個複雜的查詢切分成多個簡單的查詢傳送到資料庫伺服器進行查詢可以起到提高效能,減輕資料庫壓力的作用。比如,如果使用了乙個長時間的查詢語句,這個查詢可能會導致資料被加行鎖而無法被其他的事務更新,這樣的話可能會導致其他事務長時間處於掛起狀態。如果使用短小的查詢就會好很多。在使用in+select子句查詢的時候,如果先一步查詢出select子句,然後使用結果集替換,那麼乙個關聯查詢就會變成 乙個普通查詢+普通查詢,而這兩個查詢都是高效能的,應為可以使用索引,第二個in查詢會在優化器的作用下使用二分查詢從而進一步提公升效能。

1.2在資料庫中切分查詢。最常見的是在乙個儲存過程中刪除大量的表資料,這種操作會導致長時間的占用鎖導致其他的事務阻塞。分段進行會起到很好的作用。

MySQL學習筆記 select語句效能優化建議

關於sql中select效能優化有以下建議,僅當筆記記錄。1.檢查索引 where join部分欄位都該加上索引 2.限制工作資料集的大小 利用where字句過濾 3.只選擇需要的字段 減少io開銷 4.移除不必要的表 5.移除外部連線查詢 outer joins 更新null值佔位符 6.刪除jo...

高效能MySql學習筆記 第六章 查詢效能優化

mysql是否在掃瞄額外的記錄 切分查詢 分解關聯查詢 查詢快取 查詢優化處理 資料和索引的統計資訊 排序優化 查詢執行引擎 union的限制 並行執行 鬆散索引掃瞄 如果對優化器選擇的執行計畫不滿意,可以使用優化器提供的提示來控制最終的執行計畫。delayed straight join sql ...

MySQL學習筆記 查詢效能優化

查詢效能低下最根本的原因就是訪問的資料太多,大部分效能低下的查詢都可以通過減少訪問的資料量進行優化。一般有效的分析步驟如下 優化有問題的查詢時,目標應該是找到乙個更優的方法獲取實際需要的資料,而不是一定總是從mysql獲取一模一樣的結果集。優點 快取效率更高。許多應用程式可以方便地快取單錶查詢對應的...