【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.mzph.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 模块实现动态特征…