【MySQL数据库之索引相关】

1、什么是索引?

索引(Index)是一种用于提高查询效率的数据结构。
索引通过为数据库表中的一列或多列创建一个引用,从而加快数据的检索速度。(对列创建索引)
索引类似于书的目录,可以帮助数据库快速找到所需的数据,而不必扫描整个表(不需要看完正本书)。

2、索引的类型有哪些?

索引的类型

1、普通索引(Normal Index):

最基本的索引类型,没有任何约束条件。
语法:CREATE INDEX index_name ON table_name (column_name);


2、唯一索引(Unique Index):

索引列的值必须唯一,但允许有空值。
语法:CREATE UNIQUE INDEX index_name ON table_name (column_name);


3、主键索引(Primary Key Index):

一种特殊的唯一索引,不允许有空值。
每个表只能有一个主键索引。
语法:PRIMARY KEY (column_name)

4、全文索引(Full-text Index):

用于全文搜索,主要用于查找文本内容。
适用于 CHAR、VARCHAR 和 TEXT 类型的列。
语法:CREATE FULLTEXT INDEX index_name ON table_name (column_name);
组合索引(Composite Index):

在多个列上创建的索引。
语法:CREATE INDEX index_name ON table_name (column1, column2, ...);

3、索引的优点

索引的优点

1、提高查询速度:
索引可以显著提高数据检索的速度,尤其是在涉及大量数据的查询中。

2、加速单表的排序和分组操作:
索引可以加快 ORDER BY 和 GROUP BY 操作的执行速度。

3、加速表之间的连接操作:
索引可以提高表之间连接操作的效率。

 4、索引的缺点

索引的缺点

1、占用空间:
索引需要额外的存储空间(物理空间),尤其是当索引列的数量和数据量较大时。

2、影响写操作性能:
当对表进行插入、更新和删除操作时,索引也需要动态的维护,因此会增加增/删/改的时间。

在插入、更新和删除操作时,数据库需要维护索引,以确保索引的正确性和有效性。
这意味着在执行这些操作时,除了修改表中的数据,还需要更新索引中的数据。

5、创建索引

-- 创建普通索引
CREATE INDEX idx_column_name ON table_name (column_name);

-- 创建唯一索引
CREATE UNIQUE INDEX idx_unique_column_name ON table_name (column_name);

-- 创建全文索引
CREATE FULLTEXT INDEX idx_fulltext_column_name ON table_name (column_name);

-- 创建组合索引
CREATE INDEX idx_composite ON table_name (column1, column2);

6、删除索引

-- 删除索引
DROP INDEX index_name ON table_name;

7、索引的基本原理

数据结构:

索引通常使用特定的数据结构来存储和组织数据,以便快速检索。
常见的数据结构包括B树(B-Tree)、B+树(B+Tree)和哈希表(Hash Table)。

1、B+树索引:

在MySQL中,B+树是最常用的索引结构,特别是InnoDB存储引擎。
B+树是一种平衡树,所有叶子节点都在同一层,并且通过链表连接。
每个节点包含多个键值和指向子节点的指针,叶子节点包含实际数据的指针。
B+树的特点是能够保持数据的有序性,并且查找、插入、删除操作的时间复杂度为O(log n)。

2、哈希索引:

哈希索引基于哈希表实现,适用于等值查询。
哈希索引通过哈希函数将键值映射到哈希表中的位置,从而实现快速查找。
哈希索引不适用于范围查询,因为哈希函数无法保证键值的有序性。

8、索引的工作原理

索引的工作原理
1、创建索引:
当创建索引时,数据库会根据指定的列构建索引结构,并将这些列的值和相应的行指针存储在索引中。

2、查询优化:
当执行查询时,查询优化器会分析查询语句,并决定是否使用索引。
如果使用索引,数据库会通过索引快速定位到满足条件的行,而不必扫描整个表。

3、维护索引:
在插入、更新和删除操作时,数据库需要维护索引,以确保索引的正确性和有效性。
这意味着在执行这些操作时,除了修改表中的数据,还需要更新索引中的数据。

9、索引设计的原则是什么?

设计高效的数据库索引是优化查询性能的关键。以下是一些常见的索引设计原则:

### 1. 选择合适的列进行索引

- **频繁查询的列**:索引应创建在经常出现在`WHERE`、`JOIN`、`ORDER BY`和`GROUP BY`子句中的列上。
- **高选择性列**:选择性高的列(即列中的唯一值较多)更适合创建索引,因为它们可以更有效地减少扫描的行数。

### 2. 考虑索引的类型

- **单列索引 vs. 复合索引**:在多列查询中,复合索引(也称为多列索引)可以比单列索引更高效,但要注意列的顺序。
- **前缀索引**:对于长字符串列,可以创建前缀索引,只索引字符串的前几个字符,以节省空间。


### 3. 控制索引的数量和大小

- **避免过多索引**:虽然索引可以加快查询速度,但过多的索引会增加写操作的开销(如插入、更新、删除操作)以及占用更多的存储空间。
- **索引维护**:定期检查和维护索引,删除不再使用或不必要的索引。

### 4. 索引的维护和更新

- **定期重建索引**:对于频繁更新的表,索引可能会变得碎片化,定期重建索引可以保持索引的性能。
- **统计信息更新**:确保数据库的统计信息是最新的,以便查询优化器能够做出最佳的查询计划。


### 5. 考虑查询模式

- **查询频率和类型**:根据查询的频率和类型(如读多写少或写多读少)来决定索引的设计。
- **范围查询**:对于范围查询,B+树索引更适合,而哈希索引不适用。



通过遵循这些索引设计原则,可以有效地提升数据库的查询性能,同时控制索引的维护成本。每个数据库和应用场景都有其独特性,索引设计应根据具体情况进行调整和优化。

10、创建索引的原则(最重点)

1)最左前缀匹配原则,组合索引非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a=1 and b= 2 and c> 3 and d= 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。

2)较频繁作为查询条件的字段才去创建索引

3)更新频繁字段不适合创建索引

4)若是不能有效区分数据的列不适合做索引列(如性别,男女未知,最多也就三种,区分度实在太低)

5)尽量的扩展索引,不要新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。

6)定义有外键的数据列一定要建立索引。

7)对于那些查询中很少涉及的列,重复值比较多的列不要建立索引。

8)对于定义为text、image和bit的数据类型的列不要建立索引。

11、创建索引的三种方式

第一种:
在执行 CREATE TABLE时创建索引

第二种:
在使用ALTER TABLE时去增加索引

第三种:
使用CREATE INDEX命令创建

12、

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Playwright+Python】—— 环境搭建及脚本录制!

前言 看到这个文章&#xff0c;有的同学会说&#xff1a; 静姐&#xff0c;你为啥不早早就写完python系列的文章。 因为有徒弟需要吧&#xff0c;如果你也想学自学&#xff0c;那这篇文章&#xff0c;可以说是我们结缘一起学习的开始吧&#xff01; 如果对你有用&#xff0…

Qt开发 | Qt界面布局 | 水平布局 | 竖直布局 | 栅格布局 | 分裂器布局 | setLayout使用 | 添加右键菜单 | 布局切换与布局删除重构

文章目录 一、Qt界面布局二、Qt水平布局--QHBoxLayout三、Qt竖直布局四、Qt栅格布局五、分裂器布局代码实现六、setLayout使用说明七、布局切换与布局删除重构1.如何添加右键菜单2.布局切换与布局删除重构 一、Qt界面布局 Qt的界面布局类型可分为如下几种 水平布局&#xff08;…

Python+Pytest+Allure+Yaml接口自动化测试框架详解

PythonPytestAllureYaml接口自动化测试框架详解 编撰人&#xff1a;CesareCheung 更新时间&#xff1a;2024.06.20 一、技术栈 PythonPytestAllureYaml 版本要求&#xff1a;Python3.7.0,Pytest7.4.4,Allure2.18.1,PyYaml6.0 二、环境配置 1、安装python3.7&#xff0c;并配置…

解析分子筛自动填充高原制氧机的工作原理及优势

在高原地区&#xff0c;由于空气稀薄&#xff0c;氧气含量相对较低&#xff0c;这给人们的生活、工作和学习带来了诸多不便。为了解决这个问题&#xff0c;高原制氧机应运而生&#xff0c;其中分子筛自动填充高原制氧机以其高效、稳定、安全的特点受到了广泛的关注和应用。 一、…

CRMEB 多门店后台登录入口地址修改(默认admin)

一、>2.4版本 1、修改后端 config/admin.php 配置文件,为自定义的后缀 2、修改 平台后台前端源码中 view/admin/src/settings.js 文件,修改为和上面一样的配置 3、修改后重新打包前端代码,并且覆盖到后端的 public 目录下&#xff1a;打包方法 4、重启swoole 二、<2.4版…

蒙特卡洛树搜索

蒙特卡洛树搜索入门---强化学习 - 知乎蒙特卡洛树搜索&#xff08;Monte Carlo tree search&#xff09;简称MCTS&#xff0c;和一般的蒙特卡洛方法不是一个概念。通俗的理解&#xff0c;蒙特卡洛方法是随机现象中用频率来近似概率&#xff0c;模拟次数越多&#xff0c;结果越准…

从 Hadoop 迁移,无需淘汰和替换

我们仍然惊讶于有如此多的客户来找我们&#xff0c;希望从HDFS迁移到现代对象存储&#xff0c;如MinIO。我们现在以为每个人都已经完成了过渡&#xff0c;但每周&#xff0c;我们都会与一个决定进行过渡的主要、高技术性组织交谈。 很多时候&#xff0c;在这些讨论中&#xff…

项目实训-vue(十一)

项目实训-vue&#xff08;十一&#xff09; 文章目录 项目实训-vue&#xff08;十一&#xff09;1.概述2.页顶导航栏3.导航信息4.总结 1.概述 本篇博客将记录我在图片上传页面中的工作。 2.页顶导航栏 <divstyle"display: flex;justify-content: space-between;alig…

打造智能家居:用ESP32轻松实现无线控制与环境监测

ESP32是一款集成了Wi-Fi和蓝牙功能的微控制器&#xff0c;广泛应用于物联网项目。它由Espressif Systems公司开发&#xff0c;具有强大的处理能力和丰富的外设接口。下面我们将详细介绍ESP32的基础功能和引脚功能&#xff0c;并通过具体的实例项目展示其应用。 主要功能 双核处…

网络安全协议

1. 概述 1.1 网络安全需求 五种需求&#xff1a; 机密性&#xff1a;防止数据未授权公开&#xff0c;让消息对无关听众保密 完整性&#xff1a;防止数据被篡改 可控性&#xff1a;限制对网络资源&#xff08;硬件和软件&#xff09;和数据&#xff08;存储和通信&#xff0…

「2024中国数据要素产业图谱1.0版」重磅发布,景联文科技凭借高质量数据采集服务入选!

近日&#xff0c;景联文科技入选数据猿和上海大数据联盟发布的《2024中国数据要素产业图谱1.0版》数据采集服务板块。 景联文科技是专业数据服务公司&#xff0c;提供从数据采集、清洗、标注的全流程数据解决方案&#xff0c;协助人工智能企业解决整个AI链条中数据采集和数据标…

Kendryte K210 固件烧录

本章将为读者介绍 Kendryte K210 的固件烧录&#xff0c;以及 Kendryte K210 外部 NOR Flash 的空间 分布。 本章分为如下几个小节&#xff1a; 6.1 外部 NOR Flash 的空间分布 6.2 Ubuntu 下的固件烧录 6.3 Windows 下的固件烧录 外部 NOR Flash 的空间分布 Kendryte K210 的…

如何以管理员身份运行CMD?

好久没更新博客了&#xff0c;今天在日常使用中遇到了一个问题&#xff0c;顺便记录下来。 据说国内的谷歌浏览器 Chrome 可以自动升级了&#xff0c;终于不用每次都自己跑去官网下载最新版本&#xff0c;然后安装迁移&#xff0c;重复劳动。下一篇讲如何讲迁移 Chrome&#x…

【Python】已解决:Python读取字典查询键报错“KeyError: ‘d‘”

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;Python读取字典查询键报错“KeyError: ‘d’” 一、分析问题背景 在Python编程中&#xff0c;字典&#xff08;dictionary&#xff09;是一种非常重要的数据结构…

源码分析过滤器与拦截器的区别

博主最近刚拿到一个微服务的新项目&#xff0c;边研究边分析从框架基础开始慢慢带领大家研究微服务的一些东西&#xff0c;这次给大家分析下Springboot中的过滤器和拦截器的区别。虽然上次分析过过滤器&#xff0c;但是主要是分析的cas流程&#xff0c;所以就没太深入&#xff…

[创业之路-129] :制造业企业的必备管理神器-ERP-生产制造

目录 一、ERP生产制造的总体架构 1.1 主要功能模块 1.2 主要流程 二、关键功能详解 2.1 生产管理计划 2.2 物料需求计划MRP 2.3 能力需求计划 2.4 物料与库房管理 一、ERP生产制造的总体架构 1.1 主要功能模块 ERP&#xff08;企业资源计划&#xff09;生产制造系统主…

微信小程序修改应用名称

1、修改名称&#xff08;10分钟即可生效&#xff09; 账号管理员 2、修改icon&#xff08;如果logo带有名称则需要修改&#xff09;

零基础STM32单片机编程入门(二)GPIO详解及驱动LED灯实战含源码视频

文章目录 一.概要二.STM32F103C8T6单片机GPIO口特点二.STM32单片机GPIO内部结构图三.单片机GPIO推挽输出信号流向四.单片机GPIO浮空输入信号流向四.单片机GPIO引脚的复用以及重映射五.CubeMX配置一个GPIO输出驱动LED灯例程六.CubeMX工程源代码下载七.讲解视频链接地址八.小结 一…

MATLAB基础应用精讲-【数模应用】协方差分析 (ANCOVA)

目录 几个高频面试题目 协方差分析和多因素方差分析区别 因子方差分析和协方差分析对比 情景1 因子方差分析的主要内容 SPSS实现因子方差分析 情景2 协方差分析的主要内容 SPSS中进行协方差分析 几个相关概念 算法原理 什么是协方差分析 算法特点 ANCOVA 的步骤 …

如何处理消息积压问题

什么是MQ消息积压&#xff1f; MQ消息积压是指消息队列中的消息无法及时处理和消费&#xff0c;导致队列中消息累积过多的情况。 消息积压后果&#xff1a; ①&#xff1a;消息不能及时消费&#xff0c;导致任务不能及时处理 ②&#xff1a;下游消费者处理大量的消息任务&#…