日本xxxx18视频在线观看-日本xxxx1819-日本xxxwww在线观看-日本xxx-日本xx-日本www在线视频

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

[點晴永久免費OA][轉帖]什么時候 MySQL 查詢會變慢?

freeflydom
2023年7月20日 14:32 本文熱度 1453

索引創建的好,并不意味著查詢就一定快,影響查詢效率的因素特別多,今天我們就來聊一聊這些可能影響到查詢的因素。

1. 查詢流程

開始今天的內容之前,先來和小伙伴們大概捋一捋 MySQL 的查詢流程。我們來看如下一張圖:

  1. 首先,用戶通過連接器和服務端之間建立通信連接,這個說白了就是一個 Socket 通信,用戶名/密碼的校驗,用戶權限的判斷等等,都是在這個連接器中完成的。

  2. 接下來需要對我么傳入的 SQL 進行解析,這塊跟代碼的執行流程其實差不多,先做詞法分析,識別出各種關鍵字,然后再做語法分析,語法分析就是根據 MySQL 的各種語法規則,去判斷 SQL 是否滿足語法規則。

  3. 接下來就是查詢優化器出場,查詢優化器就是分析要執行的 SQL,判斷應該選擇哪一個索引,包括在多表聯合查詢的時候,各個表的連接順序也是由查詢優化器來決定的,優化器執行完畢之后,會生成查詢執行計劃,我們平時通過 explain 關鍵字查看到的就是這個。

  4. 最后就是執行器了,執行器調用搜索引擎提供的具體接口去獲取數據。

這張圖大家大概有個印象,在后續的 MySQL 查詢和優化中,很多東西就容易理解了。

接下來我們就來看看什么情況下查詢會變慢。

2. 查詢了不需要的記錄

數據按需取用。有時候我們會忽略多拿數據對查詢性能的影響,然而優化是一個錙銖必較的事情,需要多少數據就查詢多少,要盡量避免數據庫查詢 100 條,結果前端只展示 10 條這種情況。如有需要,可以通過 limit 來限制數據庫查詢出來的數據總量。

如果在查詢的時候使用了唯一性索引的話,那么查詢到記錄之后 MySQL 就停止掃描了;但是如果查詢的時候使用的是非唯一性索引的話,那么掃描到第一條記錄之后,還會繼續向后掃描,直到掃描到第一條不滿足條件的記錄為止,對于這種情況,如果我們確定查詢的結果只有一條,則可以通過 limit 進行限制,設置 limit 1,那么掃描到第一條滿足條件的記錄之后,就不會繼續掃描了。

3. 返回需要的列

查詢的時候盡量避免 select *,這個問題在之前的文章中松哥其實和大家聊過了,因為很多時候我們在前端其實并不需要使用到那么多字段,可能只是為了查詢簡單,直接來一個 select *,有時候列數和數據總量都比較少的時候,這么寫也看不出來性能明顯的差異,但是當列數和數據量大了,那么 select * 帶來的影響就會比較大了。

特別是有的時候多表聯合查詢,如果用 select * 就會把多張表的查詢結果拼接到一起,那么此時查詢結果的列數就會成倍增加。

在前面的文章中,松哥也和大家提到過覆蓋索引,如果索引設計得當,那么在查詢的時候可以通過覆蓋索引來提高查詢的性能,但是如果使用了 select * 那么大概率是用不了覆蓋索引了。

4. 恰到好處的緩存

這里舉一個 TienChin 項目的例子,用戶登錄成功之后,在后續的流程中,經常會用到當前登錄用戶的信息,如果每次都去數據庫查詢,每次查詢返回結果都是一致的,沒有必要,此時我們可以將用戶信息存入到 Redis 緩存中,需要的時候從 Redis 中提取就可以了。

在項目中,對于這些需要多次頻繁查詢,且每次查詢返回結果一樣的數據,都可以選擇將之存入到緩存中以提高查詢性能。

5. 關注掃描行數

在查詢的時候,我們可以通過 explain 來查看執行計劃,執行計劃中有一個指標是掃描行數,如下圖中的 rows,這個就表示查詢優化器預估要掃描多少行記錄,filtered 則表示預估滿足條件的比例。

一般在單表查詢時候我們并不會特別關注 filtered 字段,在多表聯合查詢的時候會比較關注該字段的值。

6. 關注掃描類型

這一條實際上就是讓大家關注前面查詢計劃中的 type 字段的值,type 字段的取值有很多種,例如常見的 index、ALL、range、const 以及 ref,還有一些不常見的如 system、eq_ref、fulltext、ref_or_null、index_merge、unique_subquery、index_subquery 等,每一種都代表了不同的查詢計劃,再結合查詢計劃中的 Extra 字段中的值,我們大致上可以將查詢分為三種類型:

  1. 直接調用存儲引擎層進行查詢,查詢結果在 MySQL Server 層不需要額外處理,直接返回給客戶端即可。

  2. 直接從索引中過濾出來想要的值并返回給客戶端,這種時候,過濾雖然發生在 MySQL Server 層,但是由于不需要回表,效率也還過得去。

  3. 從數據表中查詢到相應的記錄,然后在 MySQL Server 層進行過濾,過濾的同時可能還需要回表,此時效率就會低一些。




該文章在 2023/7/20 14:32:23 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 中文一区二区 | 男女激情小视频在线播放免费 | 国产又粗又猛又大爽视频 | 爱上asmr| 国内自拍视频一区二区 | 大香网伊 | 日韩一区二精品服务 | 国产思思99re99在线观看 | 九一精品国产 | 国产精品熟女一区二区不 | 国产欧美日韩在线播放 | 菠萝菠萝蜜视频在线观看免 | 国产午夜一级一片 | 欧美经典成 | 91成人影院未满十八勿入 | 国产日韩精品欧美激情在线 | good神马电影伦理午夜 | 亚洲v天堂v手机在线 | 国产精品白丝网站 | 国产精品卡1卡2卡3网站 | a级国产乱理伦片在线观看国 | 欧洲中文日韩亚洲精品视频 | 免费大片黄| 日韩在线精品观看视频 | 欧美国产日韩福利 | 亚洲人成aⅴ在线播放 | 日本三区不卡高清更新二区 | 国产精品免费观看 | 国产乱子经典视频在线 | 日本亲近相奷中文字幕 | 成人福利 | 国产精品亚洲一区二区在线观看 | 国产办公室三 | 国产最熱門最齊全的電影 | 国产小视频免费在线观看 | 日本中文字幕爱丝袜 | 国产亚洲欧美在线 | 18黄人成网站在线观看 | 亚洲激情自拍 | 欧美激情亚洲激情 | 欧美日韩在线第一 |