【EasyPan】MySQL主鍵與索引核心作用解析

【EasyPan】項目常見問題解答(自用&持續更新中…)匯總版

MySQL主鍵與索引核心作用解析

一、主鍵(PRIMARY KEY)核心作用

1. 數據唯一標識

-- 創建表時定義主鍵
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL
);
  • 唯一性約束:確保每行數據有唯一標識符
  • 非空約束:主鍵列不允許NULL值
  • 物理排序:InnoDB按主鍵順序組織存儲(聚簇索引)

2. 性能優化

場景效果
WHERE條件查詢直接定位到數據頁
關聯查詢(JOIN)快速匹配關聯表數據
范圍查詢利用B+樹的有序特性加速

二、索引(INDEX)核心作用

1. 基礎索引類型

-- 創建普通索引
CREATE INDEX idx_email ON users(email);-- 創建唯一索引
CREATE UNIQUE INDEX uq_username ON users(username);

2. 核心功能對比

功能主鍵普通索引唯一索引
唯一性? 強制? 不保證? 強制
NULL值? 不允許? 允許? 允許(但僅限NULL)
數量限制每表1個每表多個每表多個
自動創建自動創建聚簇索引需手動創建需手動創建

3. 查詢優化原理

使用索引
無索引
SQL查詢
查詢分析器
索引掃描
全表掃描
快速定位數據
逐行檢查

三、實戰應用場景

1. 必須使用主鍵的場景

  • 作為外鍵關聯的基礎
  • 需要物理排序的業務(如時間線數據)
  • 高頻WHERE條件查詢的列

2. 適合建索引的場景

-- 復合索引示例
ALTER TABLE orders ADD INDEX idx_status_created (status, created_at);
場景索引類型建議示例字段
等值查詢普通索引user_id, order_no
范圍查詢復合索引created_at, price
排序操作覆蓋索引排序字段+查詢字段
統計分組復合索引group_type, region

四、注意事項

  1. 索引代價

    • 寫操作變慢(需維護索引結構)
    • 占用額外存儲空間
  2. 設計原則

    • 選擇區分度高的列(如ID > 狀態字段)
    • 避免過度索引(一般不超過5-6個)
    • 定期使用EXPLAIN分析查詢計劃
  3. 失效場景

    -- 索引失效案例
    SELECT * FROM users WHERE LEFT(username,3) = 'abc';
    -- 應改為:
    SELECT * FROM users WHERE username LIKE 'abc%';
    

五、性能對比測試

數據量無索引查詢有索引查詢提升倍數
10萬行1200ms5ms240x
100萬行9500ms8ms1187x


MySQL主鍵與索引的生活化解釋

一、主鍵:就像身份證號

1. 基本特性

  • 🆔 唯一標識:每個學生學號、每張快遞單號都不重復
  • 🚫 不能為空:就像"無名氏"不能辦銀行卡
  • 📌 快速定位:快遞員憑單號秒找包裹(數據庫憑主鍵秒查數據)

2. 生活場景

[圖書館管理系統]
├── 書號_PK001 --> 《三體》 --> A區3架2層
├── 書號_PK002 --> 《小王子》 --> B區1架5層
└── 書號_PK003 --> 《紅樓夢》 --> C區2架3層
  • 書號=主鍵,能快速找到具體書籍

二、索引:就像字典目錄

1. 普通索引(新華字典拼音查字法)

-- 給"學生姓名"加索引
ALTER TABLE students ADD INDEX idx_name (name);
  • 📖 快速查找:不用翻完整本字典,直接查"李"字在哪頁
  • 🔍 多本目錄:可以同時有拼音索引、偏旁部首索引

2. 唯一索引(公司工牌系統)

-- 防止重復手機號
CREATE UNIQUE INDEX uq_phone ON customers (phone);
  • 👔 防重復:就像公司不允許兩個員工用同一個工號
  • ?? 特殊規則:允許"未登記"(NULL),但不允許重復登記

三、主鍵vs索引的區別

主鍵索引
類比身份證通訊錄
數量每人只有1張可以有多個聯系方式
作用必須要有且不能重復加速查找但非必須
代價免費自帶需要額外維護

四、什么時候需要索引?

? 推薦場景

  1. 高頻搜索
    👉 比如電商平臺按"商品名稱"搜索(給name字段加索引)

  2. 排序需求
    👉 朋友圈按"發布時間"排序(給created_at加索引)

  3. 重要約束
    👉 用戶注冊防重復手機號(給phone加唯一索引)

? 不推薦場景

  1. 很少查詢的字段
    👎 像"用戶血型"這種幾乎不用的字段

  2. 頻繁修改的字段
    👎 像"文章閱讀數"這種每分鐘都更新的字段

五、使用技巧

  1. 復合索引口訣
    👉 把最常用的查詢條件放前面,就像"先查省→再查市"的快遞地址

  2. 索引維護成本
    ?? 每新建一個索引就像多維護一份通訊錄,會增加:

    • 存儲空間(多占手機內存)
    • 更新時間(新增聯系人要同時更新多個通訊錄)
  3. 實際效果測試
    🔍 用EXPLAIN命令查看,就像檢查快遞員是否真的用了最優路線

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

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

相關文章

IcePlayer音樂播放器項目分析及學習指南

IcePlayer音樂播放器項目分析及學習指南 項目概述 IcePlayer是一個基于Qt5框架開發的音樂播放器應用程序,使用Visual Studio 2013作為開發環境。該項目實現了音樂播放、歌詞顯示、專輯圖片獲取等功能,展現了桌面應用程序開發的核心技術和設計思想。 技…

vscode 打開新頁簽

目錄 vscode 打開新頁簽 完整settings.json內容: vscode 打開新頁簽 .vscode目錄中 新建settings.json 在 settings.json 文件中,添加或修改以下行: json "workbench.editor.enablePreview": false 這將禁用預覽模式&#xff0…

C語言高頻面試題——常量指針與指針常量區別

1. 常量指針(Pointer to Constant) 定義: 常量指針是指向一個常量數據的指針,即指針指向的內容不能通過該指針被修改。 語法: const int* ptr;或者: int const* ptr;解釋: const修飾的是指…

c++基礎·列表初始化

目錄 一、列表初始化的核心優勢 二、基礎數據類型與數組初始化 1. 基礎類型初始化 2. 數組初始化 三、類與結構體初始化 1. 構造函數匹配規則 2. 注意事項 四、標準容器初始化 五、聚合類型(Aggregate Types)初始化 1. 聚合類型定義 2. 初始化…

數據分析與產品、運營、市場之間如何有效對齊

數據分析的重要性在于它能夠將海量的原始信息轉化為可操作的洞察。以產品開發為例,通過用戶行為數據的分析,產品經理可以清晰了解哪些功能被頻繁使用,哪些設計導致用戶流失,從而優化迭代方向。運營團隊則依靠數據分析來監控供應鏈效率、預測需求波動,甚至通過實時數據調整…

[C]基礎11.深入理解指針(3)

博客主頁:向不悔本篇專欄:[C]您的支持,是我的創作動力。 文章目錄 0、總結1、字符指針變量2、數組指針變量2.1 數組指針變量是什么?2.2 數組指針變量怎么初始化? 3、二維數組傳參的本質4、函數指針變量4.1 函數指針變量…

【漏洞復現】CVE-2024-38856(ApacheOfbiz RCE)

【漏洞復現】CVE-2024-38856(ApacheOfbiz RCE) 1. 漏洞描述 Apache OFBiz 是一個開源的企業資源規劃(ERP)系統。它提供了一套企業應用程序,用于集成和自動化企業的許多業務流程。 這個漏洞是由于對 CVE-2023-51467 的…

C++入門小館: 深入string類(二)

嘿,各位技術潮人!好久不見甚是想念。生活就像一場奇妙冒險,而編程就是那把超酷的萬能鑰匙。此刻,陽光灑在鍵盤上,靈感在指尖跳躍,讓我們拋開一切束縛,給平淡日子加點料,注入滿滿的pa…

【nginx】服務的信號控制

目錄 1. 說明2. 常用信號及作用3. 信號控制的具體操作3.1 獲取 Nginx 主進程 PID3.2 發送信號 4. 應用場景4.1 重新加載配置文件4.2 日志切割 5. 平滑升級 Nginx6. 注意事項 1. 說明 1.Nginx 的信號控制是其管理服務的重要機制,通過向主進程發送特定信號&#xff0…

Ubuntu下展銳刷機工具spd_dump使用說明

spd_dump使用說明 源碼地址:https://github.com/ilyakurdyukov/spreadtrum_flash 編譯環境準備: sudo apt update sudo apt install git sudo apt install build-essential sudo apt install libusb-1.0-0-devIf you create /etc/udev/rules.d/80-spd…

鴻蒙NEXT開發LRUCache緩存工具類(單例模式)(ArkTs)

import { util } from kit.ArkTS;/*** LRUCache緩存工具類&#xff08;單例模式&#xff09;* author 鴻蒙布道師* since 2025/04/21*/ export class LRUCacheUtil {private static instance: LRUCacheUtil;private lruCache: util.LRUCache<string, any>;/*** 私有構造函…

筆記:react中 父組件怎么獲取子組件中的屬性或方法

在子組件中我們可以使用下面兩個方法去暴露你所要放行的屬性或方法&#x1f447; 1.useImperativeHandle 2.orwardRef 搭配使用例子 import React, { useState, forwardRef, useImperativeHandle } from "react"function Son(props, ref) {const [data] useStat…

《潯川代碼編輯器v2.0內測(完整)報告》

一、測試概述 潯川代碼編輯器v2.0經過為期五周的封閉內測&#xff0c;累計提交了186份測試報告。本次內測主要針對v2.0新增的多語言支持、AI輔助編碼、性能優化等核心功能進行全面驗證。 二、測試環境 - 硬件配置&#xff1a;i7-12700H/16GB RAM/512GB SSD - 操作系統&#xf…

ubuntu18.04安裝QT問題匯總

1、Could not determine which ”make“ command to run. Check the ”make“ step in the build configuration.” sudo apt-get install clang sudo apt-get install build-essential sudo apt-get install libqt4-dev 2、fatal error: sqlite3.h: No such …

基于單片機的BMS熱管理功能設計

標題:基于單片機的BMS熱管理功能設計 內容:1.摘要 摘要&#xff1a;在電動汽車和儲能系統中&#xff0c;電池管理系統&#xff08;BMS&#xff09;的熱管理功能至關重要&#xff0c;它直接影響電池的性能、壽命和安全性。本文的目的是設計一種基于單片機的BMS熱管理功能。采用…

CSS基礎-即學即用 -- 筆記1

目錄 前言CSS 基礎1. 層疊樣式表來源理解優先級源碼順序經驗法則繼承inherit 關鍵字initial 關鍵字 2. 相對單位em 和 rem響應式面板視口的相對單位使用vw定義字號使用calc()定義字號自定義屬性&#xff08;即CSS變量&#xff09; 3. 盒模型調整盒模型 前言 只需一分鐘就能學會…

Linux中服務器時間同步

簡單介紹 在 redhat 8 之前&#xff0c;時間同步服務是使用 NTP&#xff08;網絡時間協議&#xff09;來實現的&#xff0c;在 redhat 8 及之 后使用是 NTP 的實現工具 chrony 來實現時間同步。 在 redhat 8 及之后&#xff0c;默認情況下已經安裝好 chrony 軟件并已經開機啟…

讓SQL飛起來:搭建企業AI應用的SQL性能優化實戰

我上一篇文章已經講解過了如何使用公開的AI模型來優化SQL.但這個優化方法存在一定的局限性.因為公開的AI模型并不了解你的數據表結構是什么從而導致提供的優化建議不太準確.而sql表結構又是至關重要的安全問題,是不能泄露出去的.所以在此背景下我決定搭建一個自己的AI應用在內網…

小迪安全-112-yii反序列化鏈,某達oa,某商場,影響分析

yii是和tp一樣的框架 入口文件 web目錄下 相對tp比較簡單一些&#xff0c;對比tp找一下他的url結構 對應的位置結構 這個contorllers文件的actionindex就是觸發的方法 控制器&#xff0c;指向的index文件&#xff0c;就可以去視圖模塊看index文件 這就是前端展示的文件 自…

自定義多頭注意力模型:從代碼實現到訓練優化

引言 在自然語言處理和序列生成任務中,自注意力機制(Self-Attention)是提升模型性能的關鍵技術。本文將通過一個自定義的PyTorch模型實現,展示如何構建一個結合多頭注意力與前饋網絡的序列生成模型(如文本或字符生成)。該模型通過創新的 MaxStateSuper 模塊實現動態特征…