首页 > 语言 > 关键词  > MySQL约束最新资讯  > 正文

MySQL 索引详解

2010-01-19 10:12 · 稿源:MySQL 5权威指南

本文介绍了数据库索引,及其优、缺点。针对MySQL索引的特点、应用进行了详细的描述。分析了如何避免MySQL无法使用,如何使用EXPLAIN分析查询语句,如何优化MySQL索引的应用。

索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。

注:

[1]索引不是万能的

索引可以加快数据检索操作,但会使数据修改操作变慢。每修改数据记录,索引就必须刷新一次。为了在某种程序上弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。在需要把许多新记录插入某个数据表的场合,DELAY_KEY_WRITE选项的作用将非常明显。

[2]另外,索引还会在硬盘上占用相当大的空间

因此应该只为最经常查询和最经常排序的数据列建立索引。注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。

从理论上讲,完全可以为数据表里的每个字段分别建一个索引,但MySQL把同一个数据表里的索引总数限制为16个。

1. InnoDB数据表的索引

与MyISAM数据表相比,索引对InnoDB数据的重要性要大得多。在InnoDB数据表上,索引对InnoDB数据表的重要性要在得多。在 InnoDB数据表上,索引不仅会在搜索数据记录时发挥作用,还是数据行级锁定机制的苊、基础。”数据行级锁定”的意思是指在事务操作的执行过程中锁定正在被处理的个别记录,不让其他用户进行访问。这种锁定将影响到(但不限于)SELECT…LOCK IN SHARE MODE、SELECT…FOR UPDATE命令以及INSERT、UPDATE和DELETE命令。

出于效率方面的考虑,InnoDB数据表的数据行级锁定实际发生在它们的索引上,而不是数据表自身上。显然,数据行级锁定机制只有在有关的数据表有一个合适的索引可供锁定的时候才能发挥效力。

2. 限制

如果WEHERE子句的查询条件里有不等号(WHERE coloum != …),MySQL将无法使用索引。

类似地,如果WHERE子句的查询条件里使用了函数(WHERE DAY(column) = …),MySQL也将无法使用索引。

在JOIN操作中(需要从多个数据表提取数据时),MySQL只有在主键和外键的数据类型相同时才能使用索引。

如果WHERE子句的查询条件里使用比较操作符LIKE和REGEXP,MySQL只有在搜索模板的第一个字符不是通配符的情况下才能使用索引。比如说,如果查询条件是LIKE ‘abc%’,MySQL将使用索引;如果查询条件是LIKE ‘%abc’,MySQL将不使用索引。

在ORDER BY操作中,MySQL只有在排序条件不是一个查询条件表达式的情况下才使用索引。(虽然如此,在涉及多个数据表查询里,即使有索引可用,那些索引在加快ORDER BY方面也没什么作用)

如果某个数据列里包含许多重复的值,就算为它建立了索引也不会有很好的效果。比如说,如果某个数据列里包含的净是些诸如”0/1″或”Y/N”等值,就没有必要为它创建一个索引。

举报

  • 相关推荐
  • 忆联 Docker+MySQL 流控方案:打造安全高效存储底座,释放 AI 极致性能

    文章探讨了在AI时代背景下,基于Docker部署MySQL数据库的高效解决方案。通过Docker容器化技术,MySQL实现了灵活部署、资源高效利用和稳定隔离性,成为AI应用的首选数据库方案。测试结果显示,采用PCIe5.0企业级SSD配合Namespace技术和QoS优化策略,能精准控制性能偏差在2%以内,在混合读写场景下更可控制在1%以内。该方案显著提升了存储资源管理效率,为AI应用提供稳定可靠的数据存储支持,同时降低企业TCO成本,推动数据价值释放。

  • 国内MCP服务器搜索引擎有哪些?MCP导航站平台推荐

    在人工智能技术蓬勃发展的今天,AI模型与外部工具和服务的交互能力正成为推动技术进步的关键。AIbase(<https://mcp.aibase.cn/>)作为一个专注于MCP(Model Context Protocol,模型上下文协议)服务器的集合平台,为全球的AI开发者和研究人员提供了一个前所未有的资源库,助力AI技术的进一步发展。 AIbase平台的核心在于其对MCP协议的深度整合。MCP协议是一种开放标准协议,允许AI模�

  • 5岁女童感染“食脑虫”昏迷不醒 专家详解其致病机制

    近日,一则家长在社交平台的求助信息引发社会广泛关注。该家长称,其5岁女儿于6月7日和6月14日分别进行了游泳和泡温泉活动,6月22日开始出现头痛、低热、呕吐等症状,23日住院后出现抽搐,随后陷入昏迷,被转入重症监护室治疗。6月27日,孩子被检测出感染福氏耐格里阿米巴病原,病情十分危急。 医生表示,“食脑虫”并非真正的虫,而是一类单细胞小生物,学名为自�

  • 动态域名解析全攻略:从原理到实用方法详解

    本文介绍了动态域名解析(DDNS)技术及其应用。DDNS通过将动态变化的公网IP地址与固定域名绑定,解决了远程访问动态IP设备的难题。文章详细解析了三种实用方法:1)使用专业DDNS服务商;2)利用路由器内置功能;3)安装专用软件如花生壳。重点推荐了花生壳软件,其支持多系统、智能DNS解析和端口映射等功能,拥有1800万用户。使用DDNS需注意选择可靠服务商、正确配置记录、定期检查更新等事项。动态域名解析技术极大便利了远程访问需求,而花生壳凭借强大功能成为理想选择。

  • 和机器人做工友?华为博士天团详解盘古具身智能的工业落地

    华为开发者大会HDC2025聚焦具身智能技术发展,多位专家围绕机器人智能化展开深度探讨。会议指出当前人形机器人已实现基础运动控制,但需突破3D空间理解、长序列物理推理等核心技术。华为云推出CloudRobo平台,通过数字仿真、生成式AI等技术解决工业场景数据短缺问题,已应用于物流分拣等场景。专家预测未来3-5年工业机器人将率先落地,家庭陪护机器人仍需长期技术突破。会议特别强调需建立机器人伦理边界,确保技术发展与社会价值相协调。华为将持续探索AI与机器人融合,推动具身智能在千行百业的应用创新。

  • docker怎么安装MySQL docker安装MySQL教程

    把MySQL放进Docker,总共需要几步?本次就通过社区版容器安装2个mysql实例,看一下部署有多简单。

  • 甲骨文发布支持MySQL HeatWave服务的MySQL Autopilot

    MySQL Autopilot提供 9 种基于机器学习的自动化能力,进一步提升MySQL Heatwave服务的性能和可扩展性。根据行业标准TPC-H基准,MySQL HeatWave的性价比高出Snowflake达 35 倍,比亚马逊Redshift的AQUA高 13 倍。2021年8月12日,北京——甲骨文宣布推出MySQL Heatwave服务的最新组件MySQL Autopilot,可作为在Oracle云基础设施(Oracle Cloud Infrastructure, OCI)之上,MySQL数据库服务的内存中查询加速引擎。MySQL Autopilot借?

  • MySQL数据库怎么升级 MySQL数据库升级教程

    当前不少系统的数据库依旧是MySQL5.6,由于MySQL5. 7 及MySQL8. 0 在性能及安全方面有着很大的提升,因此需要升级数据库。本文通过逻辑方式、物理方式原地升级来介绍MySQL5.6 升级至MySQL5. 7 的方法,并介绍其使用场景。

  • 国内首家!京东云正式宣布支持MySQL 8.0

    1 月 25 日,京东云宣布,京东云云数据库 RDS 在所有地域正式支持 MySQL 8. 0 版本。MySQL 8.0 是目前 MySQL 社区的最新版本,相比较 MySQL 5.7,支持了更多新功能,对原有功能做了重大更新和优化,同时在性能方面也有显著的提升。此次京东云首发MySQL 8. 0 版本,不仅证明了京东云技术团队的研发实力和创新能力,同时也表现了京东云希望通过更加优质的云计算服务回馈用户,并助力用户运用新技术不断创新,实现更多的商业价值。MyS

  • 人大金仓三大兼容:MySQL迁移无忧

    MySQL5.7停服事件引发广泛关注。MySQL目前已经成为中国用户使用非常广泛的数据库,其中5.7版本的用户比重又是最高的。经过项目实战中不断测试和验证,人大金仓确保产品的稳定性和可用性,能够高可用高性能高安全地支撑和保障用户业务。