MySQL进阶介绍之索引(总结分享)

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于索引的相关内容,包括了索引的优势和劣势、索引的分类、索引的结构以及索引的创建等问题,下面一起来看一下,希望对大家有帮助。

MySQL进阶介绍之索引(总结分享)

推荐学习:mysql视频教程

索引是什么

MySQL官方对索引定义:索引(Index)是帮助MySQL高效获取数据的数据结构。索引的本质:索引是数据结构。索引的目的:提高查询效率,可以类比字典。

注:可以将索引简单的理解为 “排好序的快速查找数据结构”。一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上

我们平常所说的索引,如果没有特别指明,都是指B树(多路搜索树,并不一定是二叉的)结构组织的索引。其中聚集索引,复合索引,前缀索引,唯一索引默认都是使用B+树索引,统称索引。

索引的优势和劣势

优势

类似大学图书馆建书目索引,提高数据检索的效率,降低数据库的IO成本

通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗

劣势

索引实际上是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也会占用空间

虽然索引大大提高查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息

索引只是提高效率的一个因素,如果你的MySQL有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询

MySQL索引分类

单值索引

定义:一个索引只包含单个列,一个表可以有多个单列索引

注:一般一张表最多而言不要超过5个索引

唯一索引

定义:索引列的值必须唯一,但允许有空值

复合索引

定义:一个索引包含多个列

基本语法

创建

CREATE [UNIQUE] INDEX indexName ON mytable(columnnname(length));ALTER mytable ADD [UNIQUE] INDEX [indexName] ON (columnname(length))

删除

 DROP INDEX [indexName] ON mytable;

查看

SHOW INDEX FROM table_nameG

使用ALTER命令

有四种方式添加数据表的索引:

ALTER TABLE tbl_name ADD PRIMARY KEY (column_list):该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。

ALTER TABLE tbl_name ADD UNIQUE index_name(column_list):这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。

ALTER TABLE tbl_name ADD INDEX index_name(column_list):添加普通索引,索引值可出现多次。

ALTER TABLE tbl_name ADD FULLTEXT index_name(column_list):该语句指定了索引为FULLTEXT,用于全文索引。

注:[PRIMARY | UNIQUE | FULLTEXT]: 索引的类型,分别表示唯一索引,全文索引。创建数据表时,索引类型可以省略。
[INDEX | KEY]: 表示指定在数据表中创建索引。

MySQL索引结构

BTree索引

Hash索引

full_text全文索引

R-Tree索引

索引的创建

哪些情况需要创建索引

主键自动建立唯一索引

频繁作为查询条件的字段应该创建索引

查询中与其它表关联的字段,外键关系建立索引

频繁更新的字段不适合创建索引,因为每次更新不单单是更新记录还会更新索引

Where条件里用不到的字段不创建索引

单键/组合索引的选择问题(在高并发下倾向创建组合索引)

查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度

查询中统计或者分组字段

哪些情况不适合创建索引

表记录太少

经常增删改的表

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

推荐学习:mysql视频教程

以上就是MySQL进阶介绍之索引(总结分享)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/170334.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月1日 02:08:03
下一篇 2025年11月1日 02:13:10

相关推荐

  • PHP如何创建在线租赁平台?押金与租金计算

    处理租赁期间商品损坏的核心是建立明确的规则与保障机制,1、在租赁协议中清晰界定损坏赔偿标准,如按损坏程度扣除部分或全部押金;2、要求用户租赁前进行实名认证以提高违约成本;3、可引入保险机制,为商品购买保险以分摊平台与用户风险;4、平台应提供便捷的损坏申报与评估流程,确保处理公正透明,最终保障交易双方…

    2025年12月11日
    000
  • PHP如何创建自动发货系统?虚拟商品卡密生成

    卡密生成需结合随机数、时间戳与哈希算法(如md5(uniqid(rand(), true)))确保唯一性和复杂性,并在数据库中为卡密字段建立唯一索引防止重复;2. 支付成功后,系统通过支付网关的异步回调通知触发发货流程,接收回调数据后需进行验签、核对订单信息,并使用数据库事务保证订单更新、卡密分配与…

    2025年12月11日
    000
  • PHP怎样制作付费简历解析?人才库变现方案

    制作付费简历解析系统的核心在于整合第三方解析服务或自研模块,并结合支付与用户管理体系实现变现。1. 优先推荐整合第三方简历解析api,通过php调用接口获取结构化数据,实现高效准确的解析;2. 自研解析模块需处理多种文件格式、应用ocr及nlp技术提取信息,但开发难度高,适合有资源和技术积累的团队;…

    2025年12月11日
    000
  • PHP如何开发股票分析平台?付费数据接口提供

    选择付费数据接口时,需重点考量数据覆盖范围与粒度、接口稳定性与响应速度、并发限制及费用模式;2. 集成时应使用guzzle等http客户端封装api请求,妥善处理认证、错误与限流;3. 数据存储需设计合理的数据库结构并建立关键索引,历史数据通过定时任务批量导入,实时数据采用拉取+缓存策略,结合red…

    2025年12月11日
    000
  • PHP怎样使用Swoole协程?高性能网络编程

    swoole协程通过go函数创建协程并利用底层i/o劫持与调度机制,实现同步写法下的异步非阻塞操作,1. 使用co::go启动协程,使http请求和数据库查询等i/o操作自动挂起与恢复;2. 通过协程化客户端(如cohttpclient、comysql)实现高性能i/o;3. 利用coroutine…

    2025年12月11日
    000
  • PHP怎样处理JSON数据?json_encode/decode详解

    php处理json数据的核心是json_encode()和json_decode()函数。1. json_encode()将php变量转换为json字符串,需注意使用json_unescaped_unicode避免中文乱码,关联数组转对象、索引数组转数组,可实现jsonserializable接口自…

    2025年12月11日
    000
  • PHP如何实现数据导出Excel?PHPExcel库应用

    phpexcel在处理大型数据导出时主要面临内存溢出和执行超时的性能瓶颈,原因是其将所有数据和样式加载到内存中处理;应对方案包括分批处理数据、增加php内存限制和执行时间、简化样式设置,或迁移到支持流式写入的phpspreadsheet以优化性能;对于复杂样式,可通过合并单元格、设置列宽行高、字体样…

    2025年12月11日
    000
  • PHP如何防止SQL注入攻击?预处理语句最佳实践

    防止sql注入的核心是使用预处理语句并绑定参数,1. 使用pdo或mysqli进行参数化查询,将用户输入作为数据而非sql代码处理;2. 对所有用户输入进行验证和过滤;3. 采用最小权限原则配置数据库用户;4. 定期更新php和数据库版本;5. 部署web应用防火墙(waf)增强防护;6. 处理li…

    2025年12月11日
    000
  • PHP怎样开发众筹平台?项目筹资与回报发放

    众筹平台开发需采用php+mysql为基础,结合laravel或symfony框架及vue.js或react前端技术,合理设计数据库并使用redis等缓存技术提升性能;2. 安全性保障需通过https传输、bcrypt加密密码、参数化查询防sql注入、输入过滤防xss攻击及定期漏洞扫描来实现;3. …

    2025年12月11日
    000
  • PHP如何创建在线招标平台?保证金管理方案

    php构建在线招标平台完全可行,核心在于mvc架构(如laravel)、数据库设计(含用户、项目、保证金表)及第三方支付集成;2. 保证金管理需通过支付平台担保交易实现资金隔离,确保支付冻结、状态追踪、自动退款、违约扣除的全流程可控;3. 技术栈包括laravel/vue.js、mysql/redi…

    2025年12月11日
    000
  • 提升MySQL性能:PHP/mysqli与PHP/exec的对比与选择

    本文深入探讨了在PHP中使用mysqli库与通过exec函数调用mysql命令行工具执行MySQL请求的性能差异。通过分析两种方法的执行流程,揭示了mysqli在连接复用、资源消耗等方面的优势,并明确指出mysqli是提升应用性能的更佳选择。 在PHP开发中,与MySQL数据库进行交互是常见的需求。…

    2025年12月11日
    000
  • 使用PHP进行MySQL操作:mysqli库 vs. exec命令的性能比较

    本文旨在对比使用PHP的mysqli库和exec命令执行MySQL查询的性能差异。通过分析两种方法的执行流程,揭示mysqli库在连接复用、资源消耗等方面的优势,并强调直接使用数据库扩展库进行数据库操作的重要性。 在PHP中与MySQL数据库交互,通常有两种方式:使用mysqli或PDO等数据库扩展…

    2025年12月11日
    000
  • 优化 MySQL 性能:mysqli 扩展与 exec 调用

    本文旨在对比 PHP 中使用 mysqli 扩展与通过 exec 函数调用 MySQL 客户端程序执行 SQL 查询的性能差异。结论明确:直接使用 mysqli 或 PDO 等数据库扩展,在性能、资源消耗和代码维护性方面都远优于通过 exec 调用外部程序。 在 PHP 开发中,与 MySQL 数据…

    2025年12月11日
    000
  • PHP怎样制作分页功能?LIMIT分页算法实现

    制作php分页功能的核心是使用mysql的limit子句实现数据分块加载,1. 获取总记录数以计算总页数;2. 定义每页显示条数;3. 从get参数获取并验证当前页码;4. 计算偏移量(($currentpage – 1) * $recordsperpage);5. 构建并执行带limi…

    2025年12月11日
    000
  • Docker环境下WordPress PHP版本升级的正确姿势

    在Docker环境中升级WordPress的PHP版本,核心原则并非在现有容器内部直接修改,而是通过构建或选择包含目标PHP版本的新Docker镜像来实现。这种“构建新镜像而非修改旧容器”的方法,确保了环境的稳定、可维护性及镜像的精简,避免了在容器运行时进行复杂且易出错的内部升级操作。 Docker…

    2025年12月11日
    000
  • PHP前后端API接口统一文件管理与条件执行策略

    本文探讨了如何高效地管理一个PHP文件,使其既能作为前端AJAX请求的API接口,又能作为后端PHP脚本的内部库函数。核心解决方案在于利用条件判断机制,区分HTTP请求与内部引用,从而避免不必要的代码执行,确保脚本的灵活性和正确性。文章将提供具体的代码示例,并讨论相关最佳实践。 引言:统一PHP文件…

    2025年12月11日
    000
  • PHP怎样实现付费数据导出?CSV/Excel生成

    实现php付费数据导出需先校验用户登录状态、支付状态及数据权限,确认通过后方可执行导出;2. 数据源通过pdo或mysqli安全查询,优先使用索引优化和字段筛选提升性能;3. 文件生成推荐csv格式用fputcsv流式输出避免内存溢出,或使用phpspreadsheet生成支持复杂格式的xlsx文件…

    2025年12月11日
    000
  • Docker环境中WordPress PHP版本升级的正确实践

    在Docker环境中升级WordPress的PHP版本不应通过修改现有容器实现,而是通过构建或选择一个包含所需PHP版本的新Docker镜像。本文将详细阐述Docker镜像的不可变性原则,并提供使用官方WordPress镜像或自定义Dockerfile来安全、高效地升级PHP版本的专业指导,确保升级…

    2025年12月11日
    000
  • 在Web应用中安全地保存富文本编辑器HTML内容到数据库的完整指南

    本教程旨在解决使用TinyMCE或CKEditor等富文本编辑器时,HTML格式内容无法正确保存到数据库的问题。我们将详细介绍如何通过JavaScript正确获取编辑器的完整HTML内容,并结合PHP后端进行安全有效的处理和存储,包括客户端数据提取、服务器端数据接收、以及至关重要的安全防护措施,确保…

    2025年12月11日
    000
  • 掌握富文本编辑器内容入库:JavaScript与PHP的协同实践

    本文详细介绍了如何解决使用TinyMCE或CKEditor等富文本编辑器时,HTML标签无法正确保存到数据库的问题。核心解决方案在于客户端JavaScript中利用tinymce.activeEditor.getContent()准确获取编辑器的完整HTML内容,并将其正确传递给服务器。同时,强调了…

    2025年12月11日
    000

发表回复

登录后才能评论
关注微信