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

【数据库】【MySQL】索引

MySQL中索引的概念

索引(MySQL中也叫做"键(key)")是一种数据结构,用于存储引擎快速定找到记录。
简单来说,它类似于书籍的目录,通过索引可以快速找到对应的数据行,而无需遍历整个表。索引建立在表的列上,通过对列中的数据进行特定的排序和存储方式,使得数据库在执行查询操作时,能够迅速定位到满足条件的数据。例如,在一个包含大量用户信息的表中,如果没有索引,当要查询某个特定用户时,可能需要逐行检查每一条记录;而有了索引,数据库可以直接根据索引找到对应的用户记录,大大提高了查询效率。索引不仅可以用于加速查询,还能在数据唯一性约束、排序操作等方面发挥重要作用 。

索引的作用

  • 加快数据检索速度:通过索引可以快速定位到符合条件的数据行,减少全表扫描的次数,从而大大提高查询效率。
  • 在牺牲少量写入性能的前提下,显著提升查询效率
  • 唯一索引和主键索引能确保表中特定列的数据唯一性,避免重复数据的插入,保证数据的完整性。

索引的优缺点

优点

  • 提高查询速度,减少查询时间,提升数据库的响应性能。
  • 可以强制数据的唯一性,维护数据的完整性和一致性。

缺点

  • 占用存储空间:索引本身需要占用一定的磁盘空间,特别是在数据量较大的情况下,索引占用的空间也会相应增加。
  • 影响写入性能:在插入、更新和删除数据时,不仅要更新数据本身,还要更新对应的索引,会增加操作的时间和资源消耗。

MySQL中主流索引类型详解

索引有很多种不同的类型,可以为不同的场景提供更好的性能。在MySQL中,索引是在存储引擎层而不是在服务器层实现的。所以并没有同一的索引标准:不同存储引擎支持的索引不完全相同,不同的存储引擎相同索引的底层实现不一样,工作方式也不同。

核心索引类型对比

索引类型存储引擎支持数据结构是否唯一支持操作典型应用场景索引示例SQL
B+Tree索引InnoDB/MyISAMB+Tree可选=, >, <, >=, <=, BETWEEN, ORDER BY, LIKE ‘prefix%’主键索引、普通索引、联合索引CREATE INDEX idx_name ON users(last_name)
哈希索引MEMORY引擎显式支持
InnoDB自适应哈希隐式使用
Hash Table可选仅精确匹配 (=, <=>)内存表(MEMORY引擎)、等值过滤CREATE TABLE mem_table (...) ENGINE=MEMORY
全文索引InnoDB(5.6+)/MyISAM倒排索引不支持MATCH() AGAINST()
支持自然语言/布尔搜索
文章内容搜索、商品描述查询ALTER TABLE articles ADD FULLTEXT(title,body)
空间索引InnoDB(5.7+)/MyISAMR-Tree不支持GIS关系运算
(ST_Contains, ST_Distance等)
GIS数据查询、地图坐标查询、地理围栏判断CREATE SPATIAL INDEX sp_idx ON lands(poly)
主键索引所有引擎B+Tree强制唯一与B+Tree相同表的主标识字段CREATE TABLE ... PRIMARY KEY(id)

关注我!下一篇,我们继续详细学习不同类型的索引!

http://www.lryc.cn/news/542267.html

相关文章:

  • SprinBoot整合HTTP API:从零开始的实战指南
  • 可狱可囚的爬虫系列课程 13:Requests使用代理IP
  • DBeaver下载安装及数据库连接(MySQL)
  • 国产开源PDF解析工具MinerU
  • 消息中间件的开源实现
  • AcWing 299 裁剪序列
  • P2889 [USACO07NOV] Milking Time S
  • 基于Spring Boot的健康医院门诊在线挂号系统设与实现(LW+源码+讲解)
  • PyTorch-基础(CUDA、Dataset、transforms、卷积神经网络、VGG16)
  • 复现论文:DPStyler: Dynamic PromptStyler for Source-Free Domain Generalization
  • 6.将cr打包成网络服务|使用postman进行测试|编写oj_server的服务路由功能(C++)
  • 基于SpringBoot + Vue的共享汽车(单车)管理系统设计与实现+毕业论文+开题报告+指导搭建视频
  • Day54(补)【AI思考】-SOA,Web服务以及无状态分步解析与示例说明
  • 回溯算法之组合和排列问题
  • gihub上适合练手的Python项目
  • 解锁CSnakes:.NET与Python的融合魔法
  • Python常见面试题的详解16
  • 建筑兔零基础自学python记录29|实战词云可视化项目——分人物阵营词云(上)7
  • Vi 编辑器基本使用指南
  • 22、《Spring Boot消息队列:RabbitMQ延迟队列与死信队列深度解析》
  • linux 命令+相关配置记录(持续更新...)
  • ssh工具
  • LLM大语言模型私有化部署-使用Dify的工作流编排打造专属AI诗词数据分析师
  • Windows 图形显示驱动开发-WDDM 3.2-自动显示切换(二)
  • 基于CentOS7安装kubesphere和Kubernetes并接入外部ES收集日志
  • 软考教材重点内容 信息安全工程师 第17章 网络安全应急响应技术原理与应用
  • 使用 DeepSeek + OmniParser v2 + UIAutomation 实现 GUI 应用自动化测试的探索
  • Spring Security面试题
  • 从零开始构建基于DeepSeek的智能客服系统
  • Linux故障排查和性能优化面试题及参考答案