mysql查詢速度慢的原因 整理版

2021-10-06 00:11:19 字數 1575 閱讀 6506

在以前的部落格中陸續記錄了有關查詢效率方面的文章。今天在整理一下,寫上自己的一些心得記錄如下:

常見查詢慢的原因常見的話會有如下幾種:

1、沒有索引或沒有用到索引。

ps:索引用來快速地尋找那些具有特定值的記錄,所有mysql索引都以b-樹的形式儲存。如果沒有索引,執行查詢時mysql必須從第乙個記錄開始掃瞄整個表 的所有記錄,直至找到符合要求的記錄。表裡面的記錄數量越多,這個操作的代價就越高。如果作為搜尋條件的列上已經建立了索引,mysql無需掃瞄任何記錄 即可迅速得到目標記錄所在的位置。如果表有1000個記錄,通過索引查詢記錄至少要比順序掃瞄記錄快100倍。

索引型別:

普通索引:這是最基本的索引型別,沒唯一性之類的限制。

唯一性索引:和普通索引基本相同,但所有的索引列只能出現一次,保持唯一性。

主鍵:主鍵是一種唯一索引,但必須指定為"primary key"。

全文索引:mysql從3.23.23開始支援全文索引和全文檢索。在mysql中,全文索引的索引型別為fulltext。全文索引可以在varchar或者text型別的列上建立。

2、io吞吐量小形成了瓶頸。

ps:這是從系統層來分析mysql是比較耗io的。一般資料庫監控也是比較關注io。

監控命令:$iostat -d -k 1 10

引數 -d 表示,顯示裝置(磁碟)使用狀態;-k某些使用block為單位的列強制使用kilobytes為單位;1 10表示,資料顯示每隔1秒重新整理一次,共顯示10次。

3、記憶體不足

監控記憶體使用:vmstat [-n] [延時[次數]]

memory

swpd: 切換到交換記憶體上的記憶體(預設以kb為單位)

• 如果 swpd 的值不為0,或者還比較大,比如超過100m了,但是si, so 的值長期為0,這種情況我們可以不用擔心,不會影響系統效能。

free: 空閒的物理記憶體

buff: 作為buffer cache的記憶體,對塊裝置的讀寫進行緩衝

cache: 作為page cache的記憶體, 檔案系統的cache• 如果 cache 的值大的時候,說明cache住的檔案數多,如果頻繁訪問到的檔案都能被cache住,那麼磁碟的讀io bi 會非常小。

4、網路速度慢

ping ip -t 檢視是否有丟包。

5、一次查詢的資料量過大。

比如沒有分頁查詢,一次提取上萬條記錄。資料庫有可能卡死。

6、出現死鎖

所謂死鎖: 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去.

show innodb status檢查引擎狀態 ,可以看到哪些語句產生死鎖。

執行show  processlist找到死鎖執行緒號.然後kill processno

7、返回了不必要的行或列

一般查詢sql語句一定要將字段明確指定。而不要使用*進行查詢

8、注意union和union all 的區別。union all好

union在進行表鏈結後會篩選掉重複的記錄,所以在表鏈結後會對所產生的結果集進行排序運算,刪除重複的記錄再返回結果。所以union all的效率肯定要高!

9、

mysql查詢速度慢的原因 整理版

在以前的部落格中陸續記錄了有關查詢效率方面的文章。今天在整理一下,寫上自己的一些心得記錄如下 常見查詢慢的原因常見的話會有如下幾種 1 沒有索引或沒有用到索引。ps 索引用來快速地尋找那些具有特定值的記錄,所有mysql索引都以b 樹的形式儲存。如果沒有索引,執行查詢時mysql必須從第乙個記錄開始...

MySQL 查詢速度慢

2016年09月30日 14 31 44 以下是基於我結合b 樹的資料結構和對實驗結果的推測作出的判斷,如有錯誤,懇請指正!今天實驗了一下mysql的count 操作優化,以下討論基於mysql5.7 innodb儲存引擎.x86 windows作業系統。建立的表的結構如下 資料量為100萬 首先是...

查詢速度慢的原因,如何優化查詢

頁面顯示資料一定要及時的呈現,否則會影響使用者體現.那麼導致頁面載入資料慢或者顯示滯後的原因又是什麼呢?原因分析 後台資料庫中資料過多,未做資料優化 資料請求 解析 展示處理不當 網路問題 提高資料庫查詢的速度方案 sql 查詢速度慢的原因有很多,常見的有以下幾種 1 沒有索引或者沒有用到索引 查詢...