mysql的索引有哪些?

1. 主键索引(PRIMARY KEY)

主键索引通常在创建表时定义,确保字段唯一且非空:

-- 建表时直接定义主键
CREATE TABLE users (id INT NOT NULL,name VARCHAR(50),PRIMARY KEY (id)  -- 单字段主键
);-- 复合主键(多字段组合唯一)
CREATE TABLE order_details (order_id INT NOT NULL,product_id INT NOT NULL,quantity INT,PRIMARY KEY (order_id, product_id)  -- 多字段组合主键
);

2. 唯一索引(UNIQUE)

确保字段值唯一(允许 NULL,但 NULL 只能出现一次):

-- 建表时创建唯一索引
CREATE TABLE users (id INT PRIMARY KEY,phone VARCHAR(11) NOT NULL,email VARCHAR(32) NOT NULL,UNIQUE INDEX idx_email (email)  -- 为 email 字段创建唯一索引
);-- 表已存在时添加唯一索引
CREATE UNIQUE INDEX idx_phone ON users(phone);  -- 为 phone 字段创建唯一索引

3. 普通索引(INDEX)

最基础的索引,无唯一性约束,仅用于加速查询:

-- 建表时创建普通索引
CREATE TABLE articles (id INT PRIMARY KEY,title VARCHAR(200),content TEXT,create_time DATETIME,INDEX idx_create_time (create_time)  -- 为创建时间创建普通索引
);-- 表已存在时添加普通索引
CREATE INDEX idx_title ON articles(title);  -- 为标题创建普通索引

4. 复合索引(多列索引)

基于多个字段组合创建,遵循 “最左前缀匹配原则”:

-- 为 user_id 和 status 组合创建复合索引
CREATE TABLE orders (id INT PRIMARY KEY,user_id INT,status TINYINT,create_time DATETIME,INDEX idx_user_status (user_id, status)  -- 复合索引
);-- 表已存在时添加复合索引
CREATE INDEX idx_name_age ON users(name, age);  -- 为 name 和 age 组合创建索引

复合索引的 “最左前缀匹配原则” 是指:当使用复合索引(多字段组合索引)时,数据库会优先匹配索引中最左侧的字段,只有当左侧字段被有效使用时,索引才会被部分或完全启用。

具体规则如下:

  1. 从左到右匹配
    复合索引 (a, b, c) 会优先匹配字段 a,再匹配 a+b,最后匹配 a+b+c
    例如,对于索引 (name, age, gender)

    • 能触发索引的查询条件:
      WHERE name = ?
      WHERE name = ? AND age = ?
      WHERE name = ? AND age = ? AND gender = ?
    • 无法触发索引的查询条件:
      WHERE age = ?(跳过了最左的 name
      WHERE age = ? AND gender = ?(缺少最左的 name
  2. 中间字段不连续时,仅匹配到连续的左侧字段
    对于索引 (a, b, c),如果查询条件是 WHERE a = ? AND c = ?,则只有 a 字段会使用索引,c 字段无法利用索引(因为跳过了 b)。

  3. 范围查询会中断后续匹配
    如果最左字段使用范围查询(><BETWEEN 等),则后续字段无法利用索引。
    例如,对于索引 (name, age)

    • WHERE name = ? AND age > ?name 全匹配,age 范围查询,索引有效。
    • WHERE name > ? AND age = ?name 是范围查询,age 无法利用索引。

示例
假设有复合索引 (user_id, order_time),以下查询的索引使用情况:

  • SELECT * FROM orders WHERE user_id = 100 → 索引完全生效
  • SELECT * FROM orders WHERE user_id = 100 AND order_time > '2023-01-01' → 索引生效(user_id 全匹配,order_time 范围匹配)
  • SELECT * FROM orders WHERE order_time > '2023-01-01' → 索引失效(跳过最左的 user_id

总结:创建复合索引时,应将查询频率最高、区分度最高的字段放在左侧,且查询条件需从左到右使用索引字段,才能最大限度利用复合索引的性能优势。

5. 全文索引(FULLTEXT)

用于大文本字段的全文检索(仅支持 CHAR、VARCHAR、TEXT 类型):

-- 建表时创建全文索引
CREATE TABLE articles (id INT PRIMARY KEY,title VARCHAR(200),content TEXT,FULLTEXT INDEX idx_content (content)  -- 为 content 字段创建全文索引
);-- 表已存在时添加全文索引
CREATE FULLTEXT INDEX idx_title_content ON articles(title, content);  -- 多字段组合全文索引使用方式:查询时需用 MATCH() AGAINST() 语法:SELECT * FROM articles 
WHERE MATCH(title, content) AGAINST('数据库 索引' IN BOOLEAN MODE);

6. 空间索引(SPATIAL)

针对空间数据类型(如 POINT、GEOMETRY 等)的索引:

-- 建表时创建空间索引(字段必须为 NOT NULL)
CREATE TABLE locations (id INT PRIMARY KEY,position POINT NOT NULL,  -- 空间类型字段SPATIAL INDEX idx_position (position)  -- 空间索引
);-- 表已存在时添加空间索引
CREATE SPATIAL INDEX idx_geo ON locations(position);

注意事项:

  • 索引名(如 idx_email)建议遵循 idx_字段名 格式,便于识别。
  • 复合索引的字段顺序会影响查询效率,应将查询频率高的字段放在前面。
  • 过多索引会降低插入 / 更新 / 删除的性能,需根据业务查询频率权衡。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/919990.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机视觉与深度学习实战】08基于DCT、DFT和DWT的图像变换处理系统设计与实现(有完整代码python3.13可直接粘贴使用)

1. 引言 数字图像处理作为计算机视觉和信号处理领域的重要分支,在过去几十年中得到了快速发展。图像变换技术作为数字图像处理的核心技术之一,为图像压缩、特征提取、去噪和增强等应用提供了强有力的数学工具。离散余弦变换(Discrete Cosine Transform, DCT)、离散傅里叶变…

使用Python实现DLT645-2007智能电表协议

文章目录&#x1f334;通讯支持&#x1f334; 功能完成情况服务端架构设计一、核心模块划分二、数据层定义三、协议解析层四、通信业务层&#xff08;以DLT645服务端为例&#xff09;五、通信层&#xff08;以TCP为例&#xff09;使用例子&#x1f334;通讯支持 功能状态TCP客…

未来已来:基于IPv6单栈隔离架构的安全互联实践报告

未来已来&#xff1a;基于IPv6单栈隔离架构的安全互联实践报告 报告摘要 随着IPv4地址资源彻底枯竭&#xff0c;全球网络基础设施正加速向IPv6单栈&#xff08;IPv6-Only&#xff09;演进。传统“IPv4为主、IPv6为辅”的双栈模式已无法满足数字化转型对海量地址、端到端连接与原…

Ubuntu24.04 安装 Zabbix

Ubuntu24.04 安装 Zabbix 环境&#xff1a; 软件版本Ubuntu24.04.3Nginx1.24.0MySQL8.4.6PHP8.3.6phpMyAdmin5.2.2Zabbix7.4.1 LNMP 1. 更新本地软件包索引并升级已安装软件 更新可用软件包列表 把已安装的软件升级到最新版 安装常用工具 sudo apt update && sud…

【动手学深度学习】6.2. 图像卷积

目录6.2. 图像卷积1&#xff09;互相关运算2&#xff09;卷积层3&#xff09;图像中目标的边缘检测4&#xff09;学习卷积核5&#xff09;互相关与卷积6&#xff09;特征映射和感受野7&#xff09;小结. 6.2. 图像卷积 卷积神经网络的设计是用于探索图像数据&#xff0c;本节…

游戏引擎中的Billboard技术

一.视觉公告板为解决场景中Mesh网格面数过多问题,使用2D平面Mesh替换为3D平面Mesh的技术即为Billboard技术.常用于场景中植被,树叶,粒子系统等对面数有要求的场景.二.Billboard着色器实现着色器输入参数:摄像机坐标,网格坐标,摄像机观察方向着色器输出:实际2D平面随视角不变

vue-admin-template权限管理

在基于 vue-admin-template 实现权限管理时&#xff0c;通常需要结合角色权限模型和动态路由机制&#xff0c;以满足不同用户角色对页面访问权限的控制需求。分为路由页面权限和按钮权限&#xff1a;下面是具体实现思路的思维导图和具体代码流程&#xff1a;0.实现逻辑思维导图…

微信小程序,事件总线(Event Bus) 实现

1、util.js文件/*** 事件总线*/ function createEventBus() {// 私有事件存储对象&#xff0c;通过闭包保持私有性const events {};return {/*** 监听事件&#xff0c;只执行一次* param {string} eventName - 事件名称* param {Function} callback - 回调函数*/once(eventNam…

OpenCV结构光三维重建类cv::structured_light::GrayCodePattern

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::structured_light::GrayCodePattern 是 OpenCV 库中用于结构光三维重建 的一个类&#xff0c;属于 OpenCV 的 structured_light 模块。 它用于…

变频器实习DAY35 引脚电平测试 退耦电阻

目录变频器实习DAY35一、工作内容1.1 硬性平台RO7测试二、学习内容2.1 退耦电阻核心原理&#xff1a;2大特性抑制干扰四大关键作用选型&#xff1a;4个核心参数典型应用场景四大常见误区附学习参考网址欢迎大家有问题评论交流 (* ^ ω ^)变频器实习DAY35 一、工作内容 1.1 硬性…

C++标准库算法:从零基础到精通

算法库的核心理念与设计哲学 C标准库算法的设计遵循着一个令人称道的哲学&#xff1a;算法与容器的分离。这种设计并非偶然&#xff0c;而是经过深思熟虑的结果。传统的面向对象设计可能会将排序功能绑定到特定的容器类中&#xff0c;但C标准库却选择了一条更加优雅的道路——…

为什么存入数据库的中文会变成乱码

从产生、传输、处理到最终存储的整个生命周期中采用统一且正确的字符集编码。具体原因纷繁复杂&#xff0c;主要归结为&#xff1a;客户端操作系统或应用与数据库服务端字符集编码不一致、Web应用服务器到数据库驱动的连接层编码配置缺失或错误、数据库本身及其表、字段各层级的…

13种常见机器学习算法面试总结(含问题与优质回答)

目录 1. K近邻&#xff08;K-NN&#xff09; 2. 线性回归&#xff08;一元/多元&#xff09; 3. 逻辑回归 4. 决策树 5. 集成学习之随机森林 6. 贝叶斯&#xff08;朴素/高斯&#xff09; 7. SVM&#xff08;支持向量机&#xff09; 8. K-means聚类 9. DBSCAN 10. TF-…

sfc_os!SfcValidateFileSignature函数分析之WINTRUST!SoftpubLoadMessage

第一部分&#xff1a;0: kd> kc# 00 WINTRUST!SoftpubLoadMessage 01 WINTRUST!_VerifyTrust 02 WINTRUST!WinVerifyTrust 03 sfc_os!SfcValidateFileSignature 04 sfc_os!SfcGetValidationData 05 sfc_os!SfcValidateDLL 06 sfc_os!SfcQueueValidationThread 07 kernel32!B…

python写上位机并打包250824

1.python写的串口上位机软件程序 import serial import serial.tools.list_ports import tkinter as tk from tkinter import ttk, scrolledtext, messagebox, filedialog import threading import time from datetime import datetime class SerialPortAssistant: def init(se…

Wagtail CRX 简介

Wagtail CRX&#xff08;前身为 CodeRed CMS&#xff0c;由 CodeRed Corp 开发&#xff09;是一个基于 Wagtail 的 CMS 扩展包&#xff0c;主要用于快速构建营销型网站&#xff0c;提供预置组件和增强功能。最新版本为 5.0.1&#xff08;发布于 2025 年 5 月 9 日&#xff09;。…

docker compose 安装zabbix 7

docker compose 安装zabbix 7 1.环境 # hostnamectlStatic hostname: ky10Icon name: computer-vmChassis: vmMachine ID: f554764e21b74c2fa057d9aaa296af63Boot ID: 4c155f0185c24a14970ab5ea60de34f4Virtualization: vmwareOperating System: Kylin Linux Advanced Server…

EtherCAT的几种邮箱通信介绍

1. COE&#xff08;CANopen over EtherCAT&#xff09;技术特点&#xff1a;直接复用 CANopen 的对象字典&#xff08;Object Dictionary&#xff09;机制&#xff0c;通过 EtherCAT 的邮箱通信实现非周期性数据交换&#xff0c;同时支持过程数据对象&#xff08;PDO&#xff0…

【Java】springboot的自动配置

如果你用过 Spring Boot&#xff0c;一定对 “引入依赖就能用” 的体验印象深刻 —— 加个spring-boot-starter-web就有了 Web 环境&#xff0c;这个是 SpringBoot 的自动装配&#xff08;Auto-Configuration&#xff09;机制。自动装配的核心注解自动装配的逻辑看似复杂&#…

高通机型QPST平台线刷教程 线刷全分区 只通过引导文件提取单分区 写入单分区

高通芯片机型刷机平台很多&#xff0c;除过一些厂家专用的平台外。qpst是高通芯片类通用刷写平台。其操作简单 可以刷写完整固件。也可以通过单个引导文件来读取 提取整个分区。而且包含读写基带qcn等等的一些功能。 qpst工具下载 QPST 的不同版本可在多个开源平台或技术论坛中…