【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.mzph.cn/diannao/34848.shtml

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

相关文章

Shark!一个基于遗传算法的自动因子挖掘平台

DolphinDB 推出的 CPU-GPU 异构计算平台 Shark&#xff0c;将 DolphinDB 上的复杂指标计算能力无缝切换到 GPU 算力平台&#xff0c;大幅提升了计算性能。Shark 最新版本给开发者提供了两个主要功能&#xff1a;因子挖掘和因子计算。通过使用遗传算法&#xff0c;因子挖掘功能能…

编程哲学——抽象

主要参考资料: App Image Format: https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.4/esp32s3/api-reference/system/app_image_format.html# 目录 简介抽象&#xff1a;从现实到模型类和对象&#xff1a;现实与模型的映射封装&#xff1a;隐藏复杂性继承&#…

年薪超过30万的网工,需要具备什么技能?

网工是一个各行各业都需要的职业&#xff0c;工作内容属性决定了它不会只在某一方面专精&#xff0c;需要掌握网络维护、设计、部署、运维、网络安全等技能。 那么&#xff0c;网络工程师的技术水平体现在哪些方面&#xff1f;今天就跟你唠唠这个。 01 先来测测你的网络设计能力…

Flutter 像素编辑器#05 | 缩放与平移

theme: cyanosis 本系列&#xff0c;将通过 Flutter 实现一个全平台的像素编辑器应用。源码见开源项目 【pix_editor】。在前三篇中&#xff0c;我们已经完成了一个简易的图像编辑器&#xff0c;并且简单引入了图层的概念&#xff0c;支持切换图层显示不同的像素画面。 《Flutt…

Docker - Oracle Database 23ai Free

博文目录 文章目录 说明命令NavicatSYSTEMPDBADMIN 扩展公共用户本地用户 说明 Oracle 官方镜像仓库 Database 23ai Free | Oracle Docker 官方没有提供 Oracle Database 相关镜像, 但是 Oracle 官方镜像仓库有提供, 打开上面的链接, 选择 Database, 选择合适的版本, 如 enter…

Modern C++字面量一网打尽

C Literals 数值 二进制、八进制、十六进制字面量 二进制&#xff1a;0b 或 0B开头。八进制&#xff1a;0开头。十六进制&#xff1a;0x 或 0X开头。 // for different base constexpr int base2 0b1111; // 二进制 15 constexpr int base8 017; // 8进制 15 conste…

Elasticsearch:使用 Llamaindex 的 RAG 与 Elastic 和 Llama3

这篇文章是对之前的文章 “使用 Llama 3 开源和 Elastic 构建 RAG” 的一个补充。我们可以在本地部署 Elasticsearch&#xff0c;并进行展示。我们将一步一步地来进行配置并展示。你还可以参考我之前的另外一篇文章 “Elasticsearch&#xff1a;使用在本地计算机上运行的 LLM 以…

Android frida 实战: 分析全民K歌的判断逻辑

本篇进入 Android frida 实战&#xff0c;旨在分析学习全民K歌这个 app 演唱页面的判断逻辑。 版本&#xff1a;8.22.38.278 此 app 为腾讯推出的面向国内的社交娱乐类应用软件&#xff0c;主要功能是提供用户唱歌、录制和分享自己演唱的歌曲。当非 vip 用户演唱某 vip 歌曲等功…

三元前驱体废水回收镍钴工艺:环保与经济效益的双重胜利

在全球新能源产业迅猛发展的背景下&#xff0c;锂离子电池作为绿色能源的核心组件&#xff0c;其需求量激增&#xff0c;带动了上游材料市场&#xff0c;尤其是三元前驱体材料的蓬勃发展。然而&#xff0c;伴随着行业的快速扩张&#xff0c;三元前驱体生产过程中产生的含镍钴废…

Qt开发 | Qmake与CMake | Qt窗口基类 | VS Qt项目与QtCreator项目相互转化 | Qt架构 | Qt学习方法

文章目录 一、Qmake与CMake介绍1.Qmake2.CMake3.使用qmake还是cmake&#xff1f; 二、Qt3个窗口基类的区别三、vs qt与QtCreator项目相互转化方法1.QtCreator项目转VS Qt2.VS Qt项目转QtCreator项目 四、Qt架构介绍与学习方法详解 一、Qmake与CMake介绍 Qmake和CMake都是构建系…

干货分享 | TSMaster 中不同总线报文消息过滤的操作方式

TSMaster软件平台支持对不同总线&#xff08;CAN、LIN、FlexRay&#xff09;报文和信号的过滤&#xff0c;包括全局接收过滤、数据流过滤、窗口过滤、字符串过滤、可编程过滤&#xff0c;针对不同的总线信号过滤器的使用方法基本相同。今天重点和大家分享一下关于TSMaster中报文…

全国首场以AI数字内容风控为主题的大会正式官宣,首批演讲嘉宾和议题揭晓!

曾经我们感叹的“AI迎来了iPhone时刻”&#xff0c;如今已变成“iPhone迎来了AI时刻”。前段时间&#xff0c;苹果全球开发者大会的召开&#xff0c;以及闻声而起的资本市场&#xff0c;无一不再次佐证了AI的无穷想象。 从OpenAI直播演示GPT-4o和谷歌的I/O开发者大会2024&…

Unity踩坑记录

1. 如果同时在父物体和子物体上挂载BoxCollider&#xff0c;那么当使用&#xff1a; private void OnTriggerEnter2D(Collider2D collision){if (collision.CompareTag("CardGroup")){_intersectCardGroups.Add(collision.GetComponent<CardGroup>());}} 来判…

【linux学习十七】文件服务管理

一、FTP FTP server:FTP(File Transfer Protocol,文件传输协议 )是 TCP/IP 协议组中的协议之一 软件包&#xff1a;vsftpd/安装 yum -y install vsftpd//准备文件 touch /var/ftp/abc.txt //注释:FTP服务器的主目录:“/var/ftp/”&#xff0c;是FTP程序分享内容的本机目录…

数据库 复习题

有一个关系模式&#xff1a;工程关系&#xff08;工程号&#xff0c;工程名称&#xff0c;职工号&#xff0c;姓名&#xff0c;聘期&#xff0c;职务&#xff0c;小时工资率&#xff0c;工时&#xff09;&#xff0c;公司按照工时和小时工资率支付工资&#xff0c;小时工资率由…

【大数据】—二手车用户数据可视化分析案例

项目背景 在当今的大数据时代&#xff0c;数据可视化扮演着至关重要的角色。随着信息的爆炸式增长&#xff0c;我们面临着前所未有的数据挑战。这些数据可能来自社交媒体、商业交易、科学研究、医疗记录等各个领域&#xff0c;它们庞大而复杂&#xff0c;难以通过传统的数据处…

Webpack: 底层配置逻辑

概述 Webpack 5 提供了非常强大、灵活的模块打包功能&#xff0c;配合其成熟生态下数量庞大的插件、Loader 资源&#xff0c;已经能够满足大多数前端项目的工程化需求&#xff0c;但代价则是日益复杂、晦涩的使用方法&#xff0c;开发者通常需要根据项目环境、资源类型、编译目…

huggingface 笔记:peft

1 介绍 PEFT 提供了参数高效的方法来微调大型预训练模型。传统的范式是为每个下游任务微调模型的所有参数&#xff0c;但由于当前模型的参数数量巨大&#xff0c;这变得极其昂贵且不切实际。相反&#xff0c;训练较少数量的提示参数或使用诸如低秩适应 (LoRA) 的重新参数化方法…

探索增删改查(CRUD)操作在软件开发中的重要性

在软件开发中&#xff0c;CRUD&#xff08;Create&#xff0c; Read&#xff0c; Update&#xff0c; Delete&#xff09;是常见且基础的操作集合&#xff0c;它们构成了对数据进行基本管理和操作的核心。无论是开发Web应用、移动应用还是管理系统&#xff0c;了解和有效地实施…

通过分离有色和无色pdf页面减少打印费

该工具是我认识的一位中科大的大佬在本科毕业的时候做的一个小工具&#xff0c;去打印店打印全彩的毕业论文的话会比较贵&#xff0c;他想到有没有一种方案可以实现有彩色页面的pdf和没有彩色页面的pdf分开打印&#xff0c;前者打印彩色&#xff0c;后者打印黑白&#xff0c;这…