索引的概述和性能分析

news2024/11/27 12:52:59

索引index,是一种有序的数据结构,可以高效的获取数据,在数据库中维护着满足查找特定算法的数据结构,就是索引

无索引的情况,查询数据时会全表扫描,效率极低

索引结构

(1)二叉树,查询性能还行,但当数据顺序插入时,就会形成链表,数据量大时,层级就深,查询效率慢

(2)红黑树,是普通二叉树优化,但本质仍是二叉树,不适合大数据情况

(3)BTree,即多路平衡查找树,该树一个节点下可以挂多个节点,以一个5阶的树,他的每个节点底下可以挂5个子节点,每个节点最多存储4个key,5个指针。节点中超过了4个key,就会向上分裂。

(4)B+Tree,以4阶的树为例,所有的元素都会出现在叶子节点,上面的节点不存放数据,且叶子节点形成了单项链表、

在mysql中的B+Tree中,对普通的树进行了优化,即叶子节点形成的不再是单向链表,而是双向链表

(5)Hash用一定的hash算法,算出对应的hash值,映射到对应的位置上,然后存储在hash表中

多个key计算的hash值有可能重复,可以通过链表来解决(类似HashMap)

Hash只能用于对等比较,不能范围查询,也不能排序,因为查询结果无序,但查询效率高,通常只需要查询一次,有时候遇到hash碰撞要多查询

索引的分类

(1)主键索引PRIMARY

(2)唯一索引UNIQUE

(3)常规索引

(4)全文索引FULLTEXT

innoDB中,索引按存储形式又分为聚集索引和二级索引

聚集索引就是叶子节点下挂的是这一行的行数据,而二级索引的叶子节点下挂的是表的主键,还要通过主键再次索引

如果表有主键,主键索引就是聚集索引

不存在主键,将使用第一个unique索引作为聚集索引

上述都不存在,则会自动生成一个rowid作为聚集索引

索引的语法

(1)查看对应表的索引 show index from 表名;

(2)创建索引 create [ PRIMARY/UNIQUE/FULLTEXT] index 索引名 on 表名;

索引名一般这样取:idx_

--------------------------

索引性能优化

性能的优化主要是优化查询语句,所以怎么才能知道什么表中的查询较多呢?

(1)根据show [session / global] status like 'Com__9_____';可以访问CRUD的访问频次

(2)查看慢查询日志

所有执行时间超过参数long_query_time的查询都会被记录在慢查询日志,默认下慢查询日志未开启

(3)profile

数据库支持profile的话可以使用,可以使用select @@have_profiling查看是否支持

profiling默认为关闭,需要set profiling = 1打开开关

show proflies能够帮我们查看sql优化中,时间都花在了哪里

(4)explain执行计划

前三种方法都只是在时间上判断sql语句性能,而explain或desc可以获取如何执行select的信息,包括在执行中表如何连接,和连接的顺序情况

explain执行计划中,各个字段的含义:

id:select查询的序列号,表示查询中执行select字句或是操作表的顺序,当id相同时,执行顺序从上到下,id不同,则id越大,越先执行。

select_type:表示select的类型,一般有primary(主查询,即外层查询),simple(不使用表连接或子查询),union(union中的第二个或之后的查询语句),subquery(子查询)

type:表示连接类型,性能由好到差的连接类型为:null(不使用任何表),system(访问了系统表),const(使用主键或唯一索引访问),eq_ref,ref(使用非唯一索引),range(范围查询),index,all,优化sql时尽量往前优化。

possible_keys:可能应用到这张表上的索引

keys:实际使用的索引,无则为null

key_len:索引使用的字节数,一般来说长度越短越好

rows:mysql认为必须要执行查询的行数,是一个估计值

filtered:返回结果的行数占需读取行数的百分比,越大越好

extra:额外展示的信息

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

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

相关文章

Django(八)

1. 管理员操作 1.1 添加 from django.shortcuts import render, redirectfrom app01 import models from app01.utils.pagination import Paginationfrom django import forms from django.core.exceptions import ValidationError from app01.utils.bootstrap import BootStr…

使用 crypto-js 进行 AES 加解密操作

在前端开发中,数据的加密和解密是为了保障用户隐私和数据的安全性而常见的任务。AES(Advanced Encryption Standard)是一种对称密钥加密算法,被广泛用于保护敏感信息的传输和存储。本文将介绍 AES 加解密的基本原理,并…

区块链游戏概览:回顾 2023,展望 2024

作者:lesleyfootprint.network 数据来源:区块链游戏年报 关键要点 今年,比特币(BTC)市值从上年的低谷中强劲回升,相较之下,区块链游戏市场的增长虽然较为平淡,但年末也迎来了显著的…

【长文阅读】MAMBA作者博士论文<MODELING SEQUENCES WITH STRUCTURED STATE SPACES>-Chapter2

Gu A. Modeling Sequences with Structured State Spaces[D]. Stanford University, 2023. 本文是MAMBA作者的博士毕业论文,为了理清楚MAMBA专门花时间拜读这篇长达330页的博士论文,由于知识水平有限,只能尽自己所能概述记录,并适…

在微信公众号中加入ChatGPT聊天的方法

1 介绍 开源项目 "chatgpt-on-wechat" 支持通过微信公众号进行调用,这意味着用户可以在与公众号的交互中体验 ChatGPT。由于服务是部署在远端服务器上的,因此用户只需拥有一部手机,就可以在任何环境下与 ChatGPT 进行交流。例如&am…

回归预测 | Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据…

forEach如何跳出或中断循环

文章目录 概要使用try...catch抛出错误设置数组长度为0使用splice删除数组的元素 概要 在Javascript中,我们使用forEach遍历循环的时候,往往会面临跳出循环和中断循环,我们可以采取以下几种方式: 使用try…catch抛出错误 const …

IGBT工作原理

IGBT(绝缘栅双极型晶体管) 在实际应用中最流行和最常见的电子元器件是双极结型晶体管 BJT 和 MOS管。 IGBT实物图电路符号图 你可以把 IGBT 看作 BJT 和 MOS 管的融合体,IGBT具有 BJT 的输入特性和 MOS 管的输出特性。 与 BJT 或 MOS管相比,…

手把手教你学会接口自动化系列二十三-引入allure优化我们的代码结构生成报告

优化之后的代码如下: # !/usr/bin/env python# -*- coding: utf-8 -*-# Time : 2024/01# Author : Laopiimport jsonimport loggingimport allurefrom testcase.conftest import *baseUrl GetYamlData(ConfigHandler.config_path).get_yaml_data()root_path os.p…

六、Netty核心模块组件

目录 6.1 BootStrap,ServerBootStrap6.2 Future,ChannelFuture6.3 Channel6.4 Selector6.5 ChannelHandler 以及其实现类6.6 Pipeline 和 ChannelPipeline6.7 ChannelHandlerContext6.8 ChannelOption6.9 EventLoopGroup和其实现类 NioEventLoopGroup6.1…

Forward(转发)和Redirect(重定向)的异同

Forward(转发)和Redirect(重定向)是两种不同的服务器端跳转机制,它们在Servlet中用于控制页面的跳转和处理请求的方式。 Forward(转发): 特点: 转发是在服务器内部进行的…

对接苹果CMS芒果影视APPV1.0(附安装教程+源码支持多端)内置采集脚本

目录 概述1. 演示效果1.1 视频演示1.2 图文演示1.2.1 首页1.2.2 专题页1.2.3 搜索1.2.4 观影 2. 支持功能3. 插件和框架4. 部署方法4.1 后端4.1.1 准备工具4.1.2创建站点4.1.3 上传后端代码到服务器4.1.4 导入数据库4.1.5 配置数据库信息4.1.6访问后台管理系统 4.2 前端4.2.1 准…

Modern C++ 一个例子学习条件变量

目录 问题程序 施魔法让BUG浮出水面 条件变量注意事项 修改程序 问题程序 今天无意中看到一篇帖子,关于条件变量的,不过仔细看看发现它并达不到原本的目的。 程序如下,读者可以先想想他的本意,以及有没有问题: #…

基于python旅游推荐系统 协同过滤算法 爬虫 Echarts可视化 Django框架(源码)✅

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏) 毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总 🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题&#xff…

无忧秘书智脑:轻松玩转“AI彩超宝宝”功能,预见宝宝未来模样

作为准爸准妈,对肚子里的宝宝充满了好奇和期待。想象着宝宝的模样,是每个家庭都有的小确幸。如今,随着科技的发展,我们有了更先进的方式去一探究竟——那就是无忧秘书智脑的“AI彩超宝宝”功能。(功能;ai6a…

【JavaEE】网络原理:网络中的一些基本概念

目录 1. 网络通信基础 1.1 IP地址 1.2 端口号 1.3 认识协议 1.4 五元组 1.5 协议分层 什么是协议分层 分层的作用 OSI七层模型 TCP/IP五层(或四层)模型 网络设备所在分层 网络分层对应 封装和分用 1. 网络通信基础 1.1 IP地址 概念:IP地址…

Windows下载并配置Kettle

注意:需要windows配置Java 下载 Kettle 进入官网:https://www.hitachivantara.com/en-us/products/pentaho-plus-platform/data-integration-analytics/pentaho-community-edition.html 下载带有Pentaho Data Integration (Base Install)的文件&#…

Google用AI替代广告销售工作只是开始……

关注卢松松,会经常给你分享一些我的经验和观点。 前几天Google不是裁员3万人吗,其中有一个信息值得关注:就是Google的广告部门的部分员工,也被裁员了。 当然这不新鲜的,主要原因是Google的广告业务正在转向AI驱动了…

C语言从入门到实战——编译和链接

编译和链接 前言一、 翻译环境和运行环境二、 翻译环境2.1 预处理(预编译)2.2 编译2.2.1 词法分析2.2.2 语法分析2.2.3 语义分析 2.3 汇编2.4 链接 三、 运行环境 前言 在C语言中,编译和链接是将源代码转换为可执行文件的两个主要步骤。 编…

使用Element中的input组件如何实现文字和输入框在一行显示

利用 <el-form-item label"商品名称&#xff1a;">标签包裹即可&#xff0c;label写提示文字 <el-form ref"form" label-width"100px"><el-form-item label"商品名称&#xff1a;"><el-input v-model"na…