当前位置: 首页 > article >正文

Day14:关于MySQL的索引——创、查、删

 前言:先创建一个练习的数据库和数据

1.创建数据库并创建数据表的基本结构

-- 创建练习数据库
CREATE DATABASE index_practice;
USE index_practice;-- 创建基础表(包含CREATE TABLE时创建索引)
CREATE TABLE products (id INT PRIMARY KEY AUTO_INCREMENT,          -- 主键索引(自动创建)product_code VARCHAR(20) UNIQUE,            -- 唯一索引product_name VARCHAR(50) NOT NULL,price DECIMAL(10,2),description TEXT,INDEX name_index (product_name(10))        -- 前缀索引
) ENGINE=InnoDB;

 2.导入实例数据 


-- 插入最少量的测试数据
INSERT INTO products (product_code, product_name, price, description) VALUES
('P1001', '无线鼠标', 99.00, '2.4G无线连接'),
('P1002', '机械键盘', 299.00, 'RGB背光键盘'),
('P1003', '蓝牙耳机', 199.00, '主动降噪功能'),
('P1004', '智能手表', 599.00, '心率监测功能');

索引的优点

  • 可以提高查询速度。
  • 可以确保数据的唯一性。
  • 提高ORDER BY和GROUP BY的执行速度。

索引设计规则

  • 为频繁查询的字段创建索引。
  • 数据量较小的表最好不要创建索引。
  • 尽量在不同值较多的字段上创建索引。
  • 一个表中的索引不是越多越好,需要限制索引的数量。
  • 对于频繁进行插入、删除、修改操作的表,创建的索引越多,则更新表所耗费的时间就越长。

一、索引的分类 

1.普通索引

最基本的索引类型,它没有唯一性的限制,可以有重复值和空值。创建普通索引的关键字是INDEX。

2.唯一索引

这种索引与普通索引基本相同,区别在于唯一索引的索引字段的值必须是唯一的,不允许重复,但允许有空值。创建唯一索引的关键字是UNIQUE。

3.主键索引

主键索引是一种特殊的唯一索引,不同之处在于每张表只能有一个主键索引,且不允许有空值。创建主键索引的关键字是PRIMARY KEY,即主键。一般在创建表时指定主键,也可以通过修改表的方式添加主键。

4.全文索引

全文索引只能在CHAR、VARCHAR或者TEXT类型的字段上创建,并且只能在存储引擎为MyISAM和InnoDB的表中创建。创建全文索引的关键字是FULLTEXT。当查询数据量较大的字符串类型的字段时,使用全文索引可以提高查询速度。 

注意:

创建在一个字段上的索引称为单索引

创建在多个字段上的索引称为组合索引、复合索引或多列索引

如果唯一索引是组合索引,则多个字段的组合必须是唯一的。

二、创建索引 

CREATE  [ UNIQUE | FULLTEXT ]  INDEX 索引名
ON 表名 (字段名称1 [ (长度1) ]  [ ASC  DESC ] 
[, 字段名称2 [ (长度2) ]  [ ASC  DESC ]] );

说明:

  • 索引名:指定创建的索引名称,在一个表中可以创建多个索引,但是每个索引名必须是唯一的。
  • UNIQUE | FULLTEXT:可选项,UNIQUE表示创建的是唯一索引;FULLTEXT表示创建的是全文索引。
  • 长度:表示使用字段前多少个字符创建索引,这样可以减少索引文件的大小。只能对字符串类型的字段指定长度。
  • ASC | DESC:指定索引按照升序ASC或者降序DESC排序。默认值为ASC。 

 1.使用CREATE INDEX语句创建索引

CREATE TABLE demo_table (id INT PRIMARY KEY,                     -- 主键索引col1 VARCHAR(20) UNIQUE,                -- 唯一索引col2 VARCHAR(30),INDEX idx_col2 (col2)                   -- 普通索引
);mysql> DESC demo_table;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | NO   | PRI | NULL    |       |
| col1  | varchar(20) | YES  | UNI | NULL    |       |
| col2  | varchar(30) | YES  | MUL | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

2.使用ALTER TABLE语句添加索引 

CREATE INDEX idx_name ON products(product_name);mysql> CREATE INDEX idx_name ON products(product_name);
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> DESC products;
+--------------+---------------+------+-----+---------+----------------+
| Field        | Type          | Null | Key | Default | Extra          |
+--------------+---------------+------+-----+---------+----------------+
| id           | int           | NO   | PRI | NULL    | auto_increment |
| product_code | varchar(20)   | YES  | UNI | NULL    |                |
| product_name | varchar(50)   | NO   | MUL | NULL    |                |
| price        | decimal(10,2) | YES  |     | NULL    |                |
| description  | text          | YES  |     | NULL    |                |
+--------------+---------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

3.使用CREATE TABLE语句创建索引

ALTER TABLE products ADD INDEX idx_price (price);mysql> ALTER TABLE products ADD INDEX idx_price (price);
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> DESC products;
+--------------+---------------+------+-----+---------+----------------+
| Field        | Type          | Null | Key | Default | Extra          |
+--------------+---------------+------+-----+---------+----------------+
| id           | int           | NO   | PRI | NULL    | auto_increment |
| product_code | varchar(20)   | YES  | UNI | NULL    |                |
| product_name | varchar(50)   | NO   | MUL | NULL    |                |
| price        | decimal(10,2) | YES  | MUL | NULL    |                |
| description  | text          | YES  |     | NULL    |                |
+--------------+---------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

    三、查看索引

    SHOW { INDEX | INDEXES | KEYS }{ FROM | IN } 表名 [{ FROM | IN } 数据库名];
    
    • SHOW INDEX语句以二维表的形式显示指定表中的所有索引信息
    • 由于显示的信息较多不易查看,使用\G参数可以将每一行垂直显示,查看效果更好。 
    SHOW INDEX FROM products;mysql> SHOW INDEX FROM products;
    +----------+------------+--------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
    | Table    | Non_unique | Key_name     | Seq_in_index | Column_name  | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
    +----------+------------+--------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
    | products |          0 | PRIMARY      |            1 | id           | A         |           4 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
    | products |          0 | product_code |            1 | product_code | A         |           4 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
    | products |          1 | name_index   |            1 | product_name | A         |           4 |       10 |   NULL |      | BTREE      |         |               | YES     | NULL       |
    | products |          1 | idx_name     |            1 | product_name | A         |           4 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
    | products |          1 | idx_price    |            1 | price        | A         |           4 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
    +----------+------------+--------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
    5 rows in set (0.03 sec)

    四、删除索引

    1.使用DROP INDEX语句删除索引

    DROP INDEX 索引名 ON 表名;
    
    DROP INDEX idx_name ON products;

    2.使用ALTER TABLE语句删除索引 

    ALTER TABLE 表名
    DROP INDEX 索引名
    DROP PRIMARY KEY ;
    
    ALTER TABLE products
    DROP INDEX idx_price;

    相关文章:

    Day14:关于MySQL的索引——创、查、删

    前言:先创建一个练习的数据库和数据 1.创建数据库并创建数据表的基本结构 -- 创建练习数据库 CREATE DATABASE index_practice; USE index_practice;-- 创建基础表(包含CREATE TABLE时创建索引) CREATE TABLE products (id INT PRIMARY KEY…...

    Pytorch深度学习框架60天进阶学习计划 - 第41天:生成对抗网络进阶(二)

    Pytorch深度学习框架60天进阶学习计划 - 第41天:生成对抗网络进阶(二) 7. 实现条件WGAN-GP # 训练条件WGAN-GP def train_conditional_wgan_gp():# 用于记录损失d_losses []g_losses []# 用于记录生成样本的多样性(通过类别分…...

    Spring - 13 ( 11000 字 Spring 入门级教程 )

    一: Spring AOP 备注:之前学习 Spring 学到 AOP 就去梳理之前学习的知识点了,后面因为各种原因导致 Spring AOP 的博客一直搁置。。。。。。下面开始正式的讲解。 学习完 Spring 的统一功能后,我们就进入了 Spring AOP 的学习。…...

    Spring Cloud Alibaba微服务治理实战:Nacos+Sentinel深度解析

    一、引言 在微服务架构中,服务发现、配置管理、流量控制是保障系统稳定性的核心问题。Spring Cloud Netflix 生态曾主导微服务解决方案,但其部分组件(如 Eureka、Hystrix)已进入维护模式。 Spring Cloud Alibaba 凭借 高性能、轻…...

    设计模式之迭代器模式:遍历的艺术与实现

    引言 迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种顺序访问聚合对象中各个元素的方法,而又不暴露其底层实现。迭代器模式将遍历逻辑与聚合对象解耦,使得我们可以用统一的方式处理不同的集合结构。…...

    红宝书第三十六讲:持续集成(CI)配置入门指南

    红宝书第三十六讲:持续集成(CI)配置入门指南 资料取自《JavaScript高级程序设计(第5版)》。 查看总目录:红宝书学习大纲 一、什么是持续集成? 持续集成(CI)就像咖啡厅的…...

    Java—HTML:3D形变

    今天我要介绍的是在Java HTML中CSS的相关知识点内容之一:3D形变(3D变换)。该内容包含透视(属性:perspective),3D变换,3D变换函数以及案例演示, 接下来我将逐一介绍&…...

    什么是音频预加重与去加重,预加重与去加重的原理是什么,在什么条件下会使用预加重与去加重?

    音频预加重与去加重是音频处理中的两个重要概念,以下是对其原理及应用条件的详细介绍: 1、音频预加重与去加重的定义 预加重:在音频信号的发送端,对音频信号的高频部分进行提升,增加高频信号的幅度,使其在…...

    免费下载 | 2025清华五道口:“十五五”金融规划研究白皮书

    《2025清华五道口:“十五五”金融规划研究白皮书》的核心内容主要包括以下几个方面: 一、五年金融规划的重要功能与作用 凝聚共识:五年金融规划是国家金融发展的前瞻性谋划和战略性安排,通过广泛听取社会各界意见,凝…...

    微信小程序实战案例 - 餐馆点餐系统 阶段 4 - 订单列表 状态

    ✅ 阶段 4 – 订单列表 & 状态 目标 展示用户「我的订单」列表支持状态筛选(全部 / 待处理 / 已完成)支持分页加载和实时刷新使用原生组件编写 ✅ 1. 页面结构:文件结构 pages/orders/├─ index.json├─ index.wxml├─ index.js└─…...

    如何为C++实习做准备?

    博主介绍:程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章,首发gzh,见文末👇&#x1…...

    【docker】--部署--安装docker教程

    文章目录 环境方法一:脚本安装方法二:手动安装**步骤 1:卸载旧版本(如有)****步骤 2:更新系统并安装依赖****步骤 3:添加 Docker 官方 GPG 密钥****步骤 4:设置 Docker 仓库****步骤…...

    【开发记录】服务外包大赛记录

    参加服务外包大赛的A07赛道中,最近因为频繁的DEBUG,心态爆炸 记录错误 以防止再次出现错误浪费时间。。。 2025.4.13 项目在上传图片之后 会自动刷新 没有等待后端返回 Network中的fetch /upload显示canceled. 然而这是使用了VS的live Server插件才这样&…...

    Cesium.js(6):Cesium相机系统

    Camera表示观察场景的视角。通过操作摄像机,可以控制视图的位置、方向和角度。 帮助文档:Camera - Cesium Documentation 1 setView setView 方法允许你指定相机的目标位置和姿态。你可以通过 Cartesian3 对象来指定目标位置,并通过 orien…...

    AI 代码生成工具如何突破 Java 单元测试效能天花板?

    一、传统单元测试的四大痛点 时间黑洞:根据 JetBrains 调研,Java 开发者平均花费 35% 时间编写测试代码覆盖盲区:手工测试覆盖率普遍低于 60%(Jacoco 全球统计数据)维护困境:业务代码变更导致 38% 的测试用…...

    AF3 ProteinDataset类的_patch方法解读

    AlphaFold3 protein_dataset模块 ProteinDataset 类 _patch 方法的主要目的是围绕锚点残基(anchor residues)裁剪蛋白质数据,提取一个局部补丁(patch)作为模型输入。 源代码: def _patch(self, data):"""Cut the data around the anchor residues."…...

    客户端负载均衡与服务器端负载均衡详解

    客户端负载均衡与服务器端负载均衡详解 1. 客户端负载均衡(Client-Side Load Balancing) 核心概念 定义:负载均衡逻辑在客户端实现,客户端主动选择目标服务实例。典型场景:微服务内部调用(如Spring Cloud…...

    vue-element-plus-admin的安装

    文档链接:开始 | vue-element-plus-admin 之前尝试按照官方文档来安装,运行npm run dev命令却不能正常打开访问浏览器,换一个方式 首先在目录下打开命令窗口 1、克隆项目 从 GitHub 获取代码 # clone 代码 git clone https://github.com…...

    基于springboot的“流浪动物管理系统”的设计与实现(源码+数据库+文档+PPT)

    基于springboot的“流浪动物管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:springboot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 局部E-R图 系统首页界面 系统…...

    爬虫解决debbugger之替换文件

    鼠鼠上次做一个网站的时候,遇到的debbugger问题,是通过打断点然后编辑断点解决的,现在鼠鼠又学会了一个新的技能 首先需要大家下载一个reres的插件,这里最好用谷歌浏览器 先请大家看看案例国家水质自动综合监管平台 这里我们只…...

    奇怪的电梯——DFS算法

    题目 题解 每到一层楼都面临了两种选择:上还是下?因此我们可以定义一个布尔数组用来记录选择。 终止条件其实也明显,要么到了B层,要么没有找到楼层。 如果找到了,选择一个步骤少的方式。又怎么表示没有找到楼层&…...

    Open GL ES-> 工厂设计模式包装 SurfaceView + 自定义EGL的OpenGL ES 渲染框架

    XML文件 <?xml version"1.0" encoding"utf-8"?> <com.example.myapplication.EGLSurfaceView xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"…...

    2.4goweb加解密和jwt

    MD5的基本实现 1. ​​标准库调用​​ Go语言通过crypto/md5包提供MD5算法的实现。核心步骤包括&#xff1a; ​​创建哈希对象​​&#xff1a;使用md5.New()生成一个实现了hash.Hash接口的实例。​​写入数据​​&#xff1a;通过Write()方法或io.WriteString()将数据写入…...

    深入解析多表联查(MySQL)

    前言 在面试中以及实际开发中&#xff0c;多表联查是每个程序员必备技能&#xff0c;下文通过最简单的学生表和课程表的实例帮大家最快入门多表联查技能。 建立数据表 1. 学生表&#xff08;students&#xff09; 创建学生表 CREATE TABLE students (student_id INT AUTO_…...

    宇视设备视频平台EasyCVR打造智慧酒店安防体系,筑牢安全防线

    一、需求背景 酒店作为人员流动频繁的场所&#xff0c;对安全保障与隐私保护有着极高的要求。为切实维护酒店内部公共区域的安全秩序&#xff0c;24小时不间断视频监控成为必要举措。通常情况下&#xff0c;酒店需在本地部署视频监控系统以供查看&#xff0c;部分连锁酒店还希…...

    C++ 编程指南36 - 使用Pimpl模式实现稳定的ABI接口

    一&#xff1a;概述 C 的类布局&#xff08;尤其是私有成员变量&#xff09;直接影响它的 ABI&#xff08;应用二进制接口&#xff09;。如果你在类中添加或修改了私有成员&#xff0c;即使接口不变&#xff0c;编译器生成的二进制布局也会变&#xff0c;从而导致 ABI 不兼容。…...

    Linux中的文件传输(附加详细实验案例)

    一、实验环境的设置 ①该实验需要两台主机&#xff0c;虚拟机名称为 L2 和 L3 &#xff0c;在终端分别更改主机名为 node1 和 node2&#xff0c;在实验过程能够更好分辨。 然后再重新打开终端&#xff0c;主机名便都更改了相应的名称。 ②用 ip a 的命令分别查看两个主机的 …...

    基于 OpenHarmony 5.0 的星闪轻量型设备应用开发——Ch2 OpenHarmony LiteOS-M 内核应用开发

    写在前面&#xff1a; 此篇是系列文章《基于 OpenHarmony5.0 的星闪轻量型设备应用开发》的第 2 章。本篇介绍了如何在 OpenHarmony 5.0 框架下&#xff0c;针对 WS63 进行 LiteOS-M 内核应用工程的开发。 为了方便读者学习&#xff0c;需要OpenHarmony 5.0 WS63 SDK 的小伙伴可…...

    论文阅读:2024-arxiv How to Steer LLM Latents for Hallucination Detection?

    总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 How to Steer LLM Latents for Hallucination Detection? https://arxiv.org/pdf/2503.01917 https://www.doubao.com/chat/2818934852496130 其它资料: https://blog.csdn.net/we…...

    Linux--线程概念与控制

    目录 1. Linux线程概念 1-1 什么是线程 1-2 分⻚式存储管理 1-2-1 虚拟地址和⻚表的由来 1-2-2 物理内存管理 1-2-3 ⻚表 1-2-4 ⻚⽬录结构 1-2-5 两级⻚表的地址转换 1-2-6 缺⻚异常 1-3 线程的优点 1-4 线程的缺点 1-5 线程异常 1-6 线程⽤途 2. Linux进程VS线…...