首頁 >資料庫 >mysql教程 >mysql慢查詢有影響嗎

mysql慢查詢有影響嗎

coldplay.xixi
coldplay.xixi原創
2021-01-06 11:29:293167瀏覽

mysql慢查詢有影響的,原因:1、沒有索引或沒有用到索引;2、IO吞吐量小形成了瓶頸;3、記憶體不足;4、網路速度慢;5、一次查詢的資料量過大;6、出現死鎖。

mysql慢查詢有影響嗎

本教學操作環境:windows7系統、mysql8.0.22版,DELL G3電腦,此方法適用於所有品牌電腦。

相關免費學習推薦:mysql影片教學

mysql慢查詢有影響的。

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

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的效率一定要高!

以上是mysql慢查詢有影響嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn