MySQL問題4

MySQL中varchar和char的區別

在 MySQL 中,VARCHARCHAR 都是用于存儲字符串類型的字段,但它們在存儲方式、性能、適用場景等方面存在明顯區別:


1. 存儲方式

類型說明
CHAR(n)定長字符串,始終占用固定 n 個字符空間。不足的會自動在右側補空格(存儲時),查詢時會自動去除補空格。
VARCHAR(n)變長字符串,只占用實際字符長度 + 1 或 2 個字節(記錄長度信息)

舉例:

CHAR(10): 存 'abc',存儲為 'abc       '(右側補7個空格)
VARCHAR(10): 存 'abc',只占 3 + 1 = 4 個字節

2. 性能對比

特性CHARVARCHAR
讀取速度較快(定長,容易定位)略慢(需讀取長度信息)
更新性能穩定(定長不易產生碎片)大量更新可能導致行遷移和碎片
空間占用多(始終固定長度)少(根據實際長度變化)

CHAR 讀取更快,但除非數據長度始終一致,否則它占用空間較大。


3. 使用場景推薦

場景推薦類型
固定長度,如身份證號、郵編、MD5、UUIDCHAR
可變長度,如名字、地址、備注等VARCHAR

4. 其他注意事項

  • 最大長度限制

    • CHAR 最多 255 個字符。
    • VARCHAR 最多 65535 字節(注意字符集影響,如 utf8 每字符占 3 字節)。
  • 行格式限制

    • InnoDB 表中,如果 VARCHAR 太長,可能會被拆分存儲到“溢出頁”。

口訣:

「定長用 CHAR,變長用 VARCHAR;空間選 VARCHAR,速度選 CHAR。」


MySQL中count()、count(1)和count(字段名)的區別

在 MySQL 中,COUNT()COUNT(1)COUNT(字段名) 都是用于統計行數的聚合函數,但它們在統計邏輯、NULL 處理、性能優化等方面存在區別。

1 、三者區別

表達式含義是否統計 NULL 行典型用途
COUNT(*)統計所有行數(包括 NULL)表行數統計
COUNT(1)統計所有行數(包括 NULL),效果等同于 COUNT(*)和 COUNT(*) 一樣
COUNT(字段名)統計字段值不為 NULL 的行數判斷某列有多少有效值

示例:

假設有一張表 users

idnameage
1Alice15
2NULL25
3CharlieNULL
4NULLNULL
1. SELECT COUNT(*) FROM users;

返回 4,統計全部行。

2. SELECT COUNT(1) FROM users;

返回 4,和 COUNT(*) 一樣,1只是個常量

3. SELECT COUNT(name) FROM users;

返回 2,因為只有兩行 name 不是 NULL。

4. SELECT COUNT(age) FROM users;

返回 2,同樣只統計非 NULL 的 age


2、性能區別

  • COUNT(*)最推薦使用的統計行數方式:

    • MySQL 優化器會做特別優化,不實際讀取列,直接走統計信息。
  • COUNT(1) 理論上和 COUNT(*) 等價,區別不大,但沒有 COUNT(*) 優化徹底。

  • COUNT(字段名) 性能較慢,因為需要判斷字段是否為 NULL

用途推薦用法
統計表的總行數COUNT(*)
統計某列的非空數量COUNT(字段名)
代替 COUNT(*)(不推薦)COUNT(1)

區別:

  1. COUNT(*):最全、最快,連 NULL 也算。
  2. COUNT(1):等價于 COUNT(*),但沒優化優勢。
  3. COUNT(字段):只數非 NULL 的字段行。

MySQL的B+樹中查詢數據的全過程

假設我們有以下索引結構(id 是主鍵):

          [30 | 60]/    |    \[10 20] [40 50] [70 80 90] ← 葉子節點,存數據
  • 根節點 [30, 60]:索引 key,不存數據
  • 葉子節點:[10,20], [40,50], [70,80,90] 存儲完整行數據(聚簇索引)
  • 每個節點就是一頁(Page),約16KB

1、查詢過程(以查詢 id = 70 為例)

步驟一:從根節點開始搜索

  • 根節點 key 為 [30, 60]
  • 70 > 60 → 選擇第三個子節點:[70, 80, 90]

步驟二:進入葉子節點

  • 葉子節點是 [70, 80, 90]
  • 在葉子節點內部做二分查找或順序查找
  • 找到 id=70 對應的整行數據(聚簇索引)

查找完成!


2、全過程總結(圖解)

           +-------------+|  30   60    |   ← 根節點 (非葉子)+-------------+/     |      \+----------+ +------+---------+|10 20 ... | |40 50 ...| 70 80 90 ← 葉子節點+----------+ +------+---------+
  • 查詢 id=45

    • 根節點:[30,60] → 45 位于中間 → 走中間分支
    • 進入 [40,50] 節點 → 找到 45 或返回不存在

示例:B+樹結構示意圖

以一個主鍵索引為例(InnoDB 聚簇索引),建表如下:

CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(20)
);

假設表中數據如下(id 是主鍵):

id: 10, 20, 30, 40, 50, 60, 70, 80, 90

經過 B+ 樹組織后,大概結構如下:

                             [40]/       \[10, 20, 30]       [50, 60, 70] --------> [80, 90](頁1)              (頁2)                    (頁3)
  • [] 表示一個頁(Page),每頁約16KB,包含多個 key
  • 葉子節點之間通過鏈表相連(→),支持范圍查找
  • 中間節點只存索引 key,不存數據
  • 葉子節點存完整行數據(id, name)

查詢過程可視化:查找 id = 70

Step 1:從根節點開始
┌───────────────┐
│     [40]      │ ← 根節點(非葉子)
└───────────────┘│└── id > 40,向右走Step 2:進入右子樹
┌────────────────────┐
│   [50, 60, 70]      │ ← 葉子節點,頁2
└────────────────────┘Step 3:在頁2中順序查找找到了 id = 70,對應整行數據 name = 'Tom'

查詢完成,最多訪問兩頁內存/磁盤頁。


范圍查詢過程:查找 id BETWEEN 60 AND 85

Step 1:從根節點 [40] 開始,id > 40 → 右子樹Step 2:訪問頁2 [50, 60, 70] → 拿到 60, 70Step 3:順著鏈表 → 頁3 [80, 90] → 拿到 80,停止最終結果:60, 70, 80

特性可視化圖中的體現
多路平衡根節點拆成多個范圍,指向多個子頁
快速查找每層只需一次判斷(最多 2~4 層)
范圍查找快葉子節點鏈表結構,順著鏈表走
聚簇存儲葉子節點含完整行,不用回表

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/98121.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/98121.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/98121.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Web3 出海香港 101 |BuildSpace AMA 第一期活動高亮觀點回顧

香港政府在 2022-2023 年之間已經開始布局 Web3,由香港政府全資擁有的數碼港也進行了持續兩年多的深耕。目前數碼港已有接近 300 家企業入駐于此,包括 Animoca Brands、HashKey Group、CertiK 等行業知名獨角獸公司。此外,如 Cobo、OneKey、D…

LTE CA和NR CA的區別和聯系

LTE CA(Carrier Aggregation)和NR CA(New Radio Carrier Aggregation)都是載波聚合技術,它們的核心目標都是通過組合多個頻段的帶寬來提高數據傳輸速率,增強無線網絡的吞吐量。盡管它們的功能相似&#xff…

VBA 中的 Excel 工作表函數

一、引言 在使用VBA進行Excel自動化處理時,我們經常需要調用Excel內置的工作表函數來完成復雜的計算或數據處理任務。然而,很多VBA初學者并不清楚如何正確地在VBA中調用這些函數,甚至重復造輪子。本文將從基礎到進階,系統介紹如何…

老年公寓管理系統設計與實現(代碼+數據庫+LW)

摘要 隨著老齡化社會的不斷發展,老年人群體的生活質量和管理需求逐漸引起社會的廣泛關注。為了提高老年公寓的管理效率與服務質量,開發了一種基于SpringBoot框架的老年公寓管理系統。該系統充分利用了SpringBoot框架的快速開發優勢,結合現代…

綠算技術與清智圖靈簽署戰略合作協議

近日,廣東省綠算技術有限公司(以下簡稱“綠算技術”)與北京清智圖靈科技有限公司(以下簡稱“清智圖靈”)正式簽署戰略合作框架協議。雙方將圍繞通用并行計算、高端算力解決方案等領域展開深度合作,共同推動…

Android,jetpack Compose模仿QQ側邊欄

SwipeMainActivity代碼如下:package com.example.myapplicationimport android.os.Bundle import android.widget.Toast import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Colu…

Spring DI詳解--依賴注入的三種方式及優缺點分析

一、什么是DI?DI(Dependency Injection,依賴注入)是 IoC(控制反轉) 思想的最典型實現方式,核心目標只有一個:讓對象不再自己“找”依賴,而是由外部容器“送”依賴進來&am…

PPT中如何將設置的文本框邊距設為默認

通常,在PPT中插入的文本框邊距比較窄,線條和填充都為空,我們可以根據自己的需要調整文本框的邊距,以及填充顏色、線條顏色和樣式等,并且把這個設置為默認的文本框,然后就可以直接插入相同邊距和樣式的文本框…

瘋狂星期四文案網第61天運營日記

網站運營第61天,點擊觀站: 瘋狂星期四 crazy-thursday.com 全網最全的瘋狂星期四文案網站 運營報告 今日訪問量 今日搜索引擎收錄情況 收錄好像便正常了,準備加快發布頻率了

開源容器管理平臺Rancher

Rancher 是一個開源的 容器管理平臺,用于簡化 Kubernetes 和 Docker 的部署、運維和安全管理。它提供了一套用戶友好的工具,幫助開發者和運維團隊在企業環境中高效地管理容器化應用。核心功能Kubernetes 管理 支持多集群管理(本地、云、邊緣等…

AI在目前會議直播系統中應用

AI在目前會議直播系統中有多種使用場景,以下是一些常見的例子: 會議內容實時處理 實時轉寫與翻譯:借助AI語音識別算法,會議直播系統可實現語音的實時轉寫,支持多種語言和方言,轉寫準確率達98%以上。同時,部分系統還配備實時翻譯功能,將發言語音實時翻譯成多種語言字幕,…

網絡安全A模塊專項練習任務十解析

任務十:Linux操作系統安全配置-3任務環境說明: (Linux)系統:用戶名root,密碼1234561.設置賬戶密碼有效期,密碼最大有效期為30,可修改密碼最小天數為5,密碼長度為6,密碼失效前4天通知…

WorkMagic-AI驅動的營銷SaaS服務平臺

本文轉載自:WorkMagic-AI驅動的營銷SaaS服務平臺 - Hello123工具導航 ** 一、🤖 WorkMagic:跨境電商的 AI 營銷自動化神器 WorkMagic 是一家專注于為跨境電商提供AI 驅動營銷自動化解決方案的 SaaS 平臺,成立于 2023 年。它通過…

Java 線程重點 面試筆記(線程狀態,安全停止線程..)

包括線程狀態、Thread.yield()、Thread.join()、線程安全停止、標志位、中斷等,都是線程這塊秋招的重點。1. 線程狀態(Thread.State)Java 中線程有 6 種狀態:狀態含義進入條件NEW新建狀態Thread t new Thread(...);RUNNABLE可運行…

Zigbee:Polling 終端設備的睡眠機制和功耗

一、Zigbee 設備類型與功耗基礎 首先,Zigbee網絡中的設備角色決定了其功耗特性。Zigbee定義了三種邏輯設備類型: 協調器 (Coordinator)??:網絡的中心,必須始終供電,不能睡眠。功耗最高。 路由器 (Router)??:負責中繼數據,擴展網絡范圍。通常也需持續供電,以保持網…

Python迭代協議完全指南:從基礎到高并發系統實現

引言:迭代協議的核心價值在Python編程中,迭代協議是構建高效、靈活數據結構的基石。根據2024年Python開發者調查報告:92%的高級數據結構依賴迭代協議85%的數據處理框架基于迭代協議構建78%的并發系統使用自定義迭代器65%的內存優化方案通過迭…

vsan高可用:確保可訪問性、全部數據遷移,兩種類型權衡

目錄1.如果我3臺機器,其中有1臺機器突然故障,那么走的是保證可用,還是全量數據遷移?這個怎么算?一、先明確:故障場景 vs 維護場景的核心差異二、3臺主機故障時,vSAN的具體處理邏輯(為…

51單片機1(單片機基礎,LED,數碼管)

1.嵌入式嵌入式(Embedded)指的是一種專用計算機系統,它被"嵌入"或內建到一個更大的設備、產品或系統中,作為其核心控制部分,專門用于執行特定的任務或功能。通俗來講就是以應用為中心,以計算機技…

Aerobits-用于 sUAS 和 UTM/U-Space 的微型 ADS-B 技術(收發器/接收器)和無人機跟蹤應答器

Aerobits-用于 sUAS 和 UTM/U-Space 的微型 ADS-B 技術(收發器/接收器)和無人機跟蹤應答器Aerobits 是一家專門為無人機 (UAV) 和無人駕駛飛機開發微型應答器和航空電子系統的公司。我們的硬件和軟件解決方案基于專利技術,采用極低 SWaP 封裝…

Spring Security資源服務器在高并發場景下的認證性能優化實踐指南

Spring Security資源服務器在高并發場景下的認證性能優化實踐指南 摘要:本文從原理與實踐兩個層面,深入解析Spring Security資源服務器在高并發場景下的認證性能優化策略,通過關鍵源碼解讀與實際示例,幫助開發者有效提升系統吞吐與…