MySQL索引及索引的优化策略

news2024/9/28 13:07:32
1.什么是索引?

        索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息

2.为什么使用索引:

        1.高效性:利用索引可以提高数据库的查询效率

        2.唯一性:索引可以确保所查的数据的唯一性

        3.完整性:用户可以加速表和表之间的连接,实现表与表之间的参照完整性

        4.特殊能力:通过索引,可以在查询过程中,使用优化隐藏器,提高系统性能

3.索引的缺点

        1.虽然所用大大提高了查询速度,同时缺降低更新表的速度,入轨表进行insert,update,delete

        2.因为更新表是,MySQL不仅要保存数据,还要保存一下索引文件,建立索引会占用磁盘空间的索引文件

        3.如果你在一个大表上创建了多种组合索引,索引文件会快速膨胀

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

4.索引的分类:

        主键索引:在数据库为表定义一个主键将自动创建主键索引

-- 说明:
-- 某一属性组能唯一标识一条记录
-- 最常见的索引类型  -- 确保数据记录的唯一性
-- 确定特定数据记录在数据库中的位置
create table 表名(
    字段名  类型  auto_increment  primary key;

)

        唯一索引:不允许具有索引值相同的行,从而禁止重复的索引或键值

-- 说明
-- 快速定位特定数据
-- index和key关键字都可设置常规索引
-- 应加在查找条件的字段;  -- 不易添加太多,影响删除,插入,修改
create table 表民(
    字段 类型  not null unique,
     #或  unique key(字段)
)

        常规索引:最基本的索引类型,没有唯一性之类的限制

-- 说明
-- 避免同一个表中某数据列中的值重复
-- 对比主键索引只能有一个,唯一索引可有多个
create table 表明(
    字段  类型  not null,
    index/key(字段)
)

        全文索引:搜索引擎的关键技术,用于检索文本信息,可以是词语,段落

-- 语法
create table 表名(
    字段  varchar(10) not null,
    fulltext  key(字段,字段,字段) with  parser  ngram
)
-- 用法
select 字段  from 表名
where match(字段)
against('搜索的关键词')

注意:

        聚簇索引:自增主键的主键索引

        特点:

        1.使用记录主键值的大小进行记录和页的排序

                页内的记录按照主键的大小顺序排成一个单向链表

                各个存放用户记录的页 也是根据用户巨鹿的主键大小顺序拍成一个双向链表

                存放 目录项记录的页,分为不同的层次,在同一层次中的页也是根据野种目录项记录的主键顺序拍成一个双向链表

           2.B+Tree  叶子节点 存储的是完整的用户记录(存储了所有列的值,包括隐藏列)

                数据访问快:因为聚簇索引和数据保存在同一个B+Tree中,因此获取数据比非聚簇快

                聚簇索引对于主键的排序查找和范围查找速度非常快

                按照聚簇索引排列顺序,查询显示一定范围的数据,由于数据紧密相连,数据库不用从多个数据块提取数据,节省了IO操作

        缺点:

                插入速度严重依赖插入顺序,按照主键的顺序插入是最快的方式,否则将会出现页分裂,严重影响性能,因此,对于InnoDB表,我们一般都定义自增的ID为主键

                更新主键的代价很高,因为将会导致更新的行移动,第二次根据主键值找到行数据

        非聚簇索引(辅助索引或二级索引):在聚簇索引基础上创建的索引

                回表,以某列大小顺序排序的B+Tree只能确定我们要查找的记录的主键值,所以入股我们想根据某列的值查找完整用户记录,仍然需要 聚簇索引先查主键,这个过程称为回表,再查完整记录。

 创建索引的优化原则

        【强制】:1.InnoDB表必须主键为id  int/bigint  auto——increment 且主键值禁止被更新

                          2.InnoDB和MyISAM存储引擎表,索引类型必须为BTREE

        【建议】:1.主键的名称以pk开头,唯一键以uni或uk开头,普通索引以idx开头,一律小写格式,以字段的名称或缩写作为后缀

                        2.多单词组成的columnname,取前几个单词首字母,加莫单词组成column——nam

                        3.单个表上的索引个数,不能超过6个

                        4.在建立索引时,多考虑联合索引,并把区分度最高的字段放在最前面

                        5.在多表join 的SQL语句里,保证被驱动表的连接列上有索引,这样join执行效率最高

                        6.建表或加索引时,保证表里互相不存在冗余索引,

--- 索引失效:

        1.最佳左前缀法则:

        2.主键插入顺序

        3.计算,函数导致索引失效

        4.类型转换导致索引失效

        5.范围条件右边的列索引失效

        6.不等于(!=或者<>)索引失效

        7.is  null 可以使用索引,is not  null无法使用索引

        8.like 以通配符% 开头索引失效

        9.or 前后存在非索引的列,索引失效

        10.数据库个表的字符集统一使用utf8mb4

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

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

相关文章

【已解决】没有密码,如何解除PPT的“只读方式”?

PPT可以设置有密码的“只读方式”&#xff0c;保护文件不被随意编辑更改。 在设置保护后&#xff0c;打开PPT时就会弹出对话框&#xff0c;提示需要“输入密码以修改或以只读方式打开”&#xff0c;也就是输入密码才能编辑修改PPT&#xff0c;如果点击“只读”也能打开文件&am…

2025浙江(杭州)国际安防产品展览会(浙江安博会)

2025浙江&#xff08;杭州&#xff09;国际智慧城市与安防产品展览会 2025hangzhou smart city And Security Expo 时间:2025年4月23-25日 地点:杭州国际博览中心 展会介绍 浙江&#xff08;杭州&#xff09;国际智慧城市及安防产品博览会&#xff08;简称:浙江安博会&#…

探索AutoGGUF:新时代的量化工具

大家好&#xff01;今天我非常激动地向大家介绍一款新工具&#xff0c;叫做AutoGGUF。AutoGGUF是一款全新的图形用户界面&#xff0c;它是用Python语言编写的&#xff0c;基于PyQt6库。PyQt6是Python的一种绑定&#xff0c;用于创建图形用户界面。而AutoGGUF的设计初衷是简化使…

docker 安装 geoserver

docker 安装 geoserver 文章目录 docker 安装 geoserver一、准备工作二、创建容器三、安装插件3.1 插件下载3.2 将插件拷贝进容器3.3 创建新镜像 四、配置 nginx 代理 一、准备工作 # 获取最新镜像 docker pull kartoza/geoserver#创建数据持久化目录 /usr/local/application/…

大模型RAG实战|文本转换:文本分割器、中文标题增强与高级提取管道

ThinkRAG大模型RAG实战系列文章&#xff0c;带你深入探索使用LlamaIndex框架&#xff0c;构建本地大模型知识库问答系统。本系列涵盖知识库管理、检索优化、模型本地部署等主题&#xff0c;通过代码与实例&#xff0c;讲解如何打造生产级系统&#xff0c;实现本地知识库的快速检…

抽象代数精解【8】

文章目录 希尔密码矩阵矩阵基本概念行列式基本概念特殊矩阵关于乘法运算构成群 加解密原理密钥加密函数解密函数 Z 26 上的运算&#xff08; Z 256 与此类似&#xff09; Z_{26}上的运算&#xff08;Z_{256}与此类似&#xff09; Z26​上的运算&#xff08;Z256​与此类似&…

一篇模块化RAG之最新全面系统性综述

RAG访问外部知识库增强了LLMs处理知识密集型任务的能力&#xff0c;随着应用场景需求的增加&#xff0c;RAG系统变得更加复杂。传统的RAG依赖于简单的相似性检索&#xff0c;**面对复杂查询和变化多端的文本块时表现不佳&#xff1a;**对查询的浅层理解、检索冗余和噪声。 朴素…

Elasticsearch未授权访问漏洞

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索】擎&#xff0c;基于RESTful web:接口。Elasticsearch:是用Java开发的&#xff0c;并作为Apache许可条款下的开放源码发布&#xff0c;是当前流行的企业级搜索引擎。Elasticsearch的增别改…

Spring File Storage(文件的对象存储)框架基本使用指南

概述 本文仅作为快速入门&#xff0c;深入学习及使用详见官网 云存储 在开发过程当中&#xff0c;会使用到存文档、图片、视频、音频等等&#xff0c;这些都会涉及存储的问题&#xff0c;文件可以直接存服务器&#xff0c;但需要考虑带宽和存储空间&#xff0c;另外一种方式…

扑翼无人机仿生鸟技术详解

1. 仿生学原理 扑翼无人机仿生鸟技术&#xff0c;顾名思义&#xff0c;是受到自然界鸟类飞行机制的深刻启发而发展起来的一种无人机技术。仿生学原理在此技术中扮演着核心角色&#xff0c;它通过研究鸟类的翅膀结构、飞行姿态、气动效率、能量转换等生物学特性&#xff0c;力求…

Python酷库之旅-第三方库Pandas(066)

目录 一、用法精讲 261、pandas.Series.dt.year属性 261-1、语法 261-2、参数 261-3、功能 261-4、返回值 261-5、说明 261-6、用法 261-6-1、数据准备 261-6-2、代码示例 261-6-3、结果输出 262、pandas.Series.dt.month属性 262-1、语法 262-2、参数 262-3、功…

Hibernate Validator 数据校验框架

文章目录 一、数据校验框架简介1、JSR(Java 规范提案)&#xff1a;Bean Validation2、javax.validation.api3、jakarta.validation.api 二、SpringBoot基础使用1、校验get请求参数2、校验post请求参数3、常用注解4、分组校验5、自定义校验规则5、校验模式6、全局异常处理 一、数…

LabVIEW远程开发

LabVIEW远程开发是指在不同地点的开发者通过网络协同工作&#xff0c;共同开发、调试和维护基于LabVIEW的应用程序。这种开发模式适用于分布式团队、远程办公和全球化项目合作&#xff0c;能够有效利用不同地区的人才和资源。以下是LabVIEW远程开发的详细介绍&#xff1a; 1. 远…

elasticsearch的使用(二)

DSL查询 Elasticsearch的查询可以分为两大类&#xff1a; 叶子查询&#xff08;Leaf query clauses&#xff09;&#xff1a;一般是在特定的字段里查询特定值&#xff0c;属于简单查询&#xff0c;很少单独使用。 复合查询&#xff08;Compound query clauses&#xff09;&am…

C语言程序设计-[4] 算法和程序结构

1、算法 一个程序至少包含两个方面&#xff1a;数据结构和算法&#xff0c;算法就是为解决一个问题而采取的方法和步骤&#xff0c;即对程序操作步骤的描述。 算法有一定的评价标准和表示方法&#xff0c;其中流程图法和N-S结构图法是本章需要介绍的两种方法。 &#xff08;…

校园商铺管理小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商家管理&#xff0c;商品类型管理&#xff0c;商品信息管理&#xff0c;在线咨询管理&#xff0c;咨询回复管理&#xff0c;交流论坛&#xff0c;系统管理 微信端账号功能包括&a…

LabVIEW工件表面瑕疵识别系统

开发了一种利用LabVIEW和IMAQ Vision视觉工具进行工件表面瑕疵识别的系统。该系统通过图像处理技术识别并分类工件表面的裂纹、划痕等缺陷&#xff0c;从而提升生产线的分拣效率和产品质量。 项目背景 工业生产中&#xff0c;工件表面的缺陷直接影响产品质量和生产效率。传统人…

Web开发-html篇-下

这篇是接着上篇的内容&#xff0c;接着介绍html的其他标签及属性的用法&#xff0c;感兴趣的可以从我的html上篇看起 1. 超链接示例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport&…

打造干净的Git历史:本地仓库整理操作详解

让你的Git提交如行云流水&#xff1a;本地仓库整理指南 一、背景二、整理上一次提交三、整理多次提交四、注意事项五、总结 一、背景 为什么需要本地仓库整理操作呢&#xff1f; 因为本地仓库提交到远程仓库是无法撤回的&#xff0c;只能是从远端仓库拉取数据到本地&#xff0…

安装ubuntu server24.04系统

0.写在前面 Legacy和UEFI比较legacyUEFI定义基于BIOS的传统引导模式新一代的系统引导模式兼容性较好&#xff0c;支持多数系统主要支持64位系统&#xff0c;对旧版本系统支持较差磁盘分区MBR,最大2.2TB&#xff0c;最多4个主分区GPT&#xff0c;最大16TB&#xff0c;理论上无分…