索引的概述和性能分析

索引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.mzph.cn/news/635934.shtml

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

相关文章

python解决求二叉树的最长同值路径问题

对于给定的一颗二叉树,需要找到最长的路径,并且该路径上的每个节点具有相同的值的问题,对于寻找到的这条路径可以经过根节点也可以不经过根节点,两个节点之间的路径长度是由他们的变数来表示的,给定如下图的二叉树 添加…

【 Qt 快速上手】-②- Qt 环境搭建

文章目录 1. Qt 开发工具概述1.1 Qt Creator 介绍1.2 Visual Studio 介绍1.3 Eclipse 介绍 2. Qt SDK 的下载与安装2.1 Qt SDK 的下载2.2 Qt SDK 的安装2.3 验证 Qt SDK 安装是否成功2.4 Qt 环境变量配置 1. Qt 开发工具概述 Qt 开发环境需要安装三个部分: C编译器…

小伙频繁发朋友圈引发分手,拼命“晒“生活是否成为一种病态行为?

根据《西湖之声》1月19日的报道,一个小伙子因为一天发十几条朋友圈而引起了他女友的不满,女友甚至提出了分手。现如今,朋友圈已经成为每个人自我形象展示的平台,认真发朋友圈不仅是表达自己的一种方式,也是一种自我释放…

redis缓存和本地缓存的应用设计

数据查询顺序 一级缓存:本地缓存 -》二级缓存:redis缓存 -》数据库 本地缓存和分布式缓存 本地缓存:基于jvm, 意思是程序放在哪,数据就存储在哪,不需要网络请求,特别快,但是需要占用jvm的内存…

Python利用Excel读取和存储测试数据完成接口自动化教程

http_request2.py用于发起http请求 #读取多条测试用例#1、导入requests模块import requests#从 class_12_19.do_excel1导入read_data函数from do_excel2 import read_datafrom do_excel2 import write_datafrom do_excel2 import count_case#定义http请求函数COOKIENonedef ht…

Spring Boot Aop 执行顺序

Spring Boot Aop 执行顺序 1. 概述 在 spring boot 项目中,使用 aop 增强,不仅可以很优雅地扩展功能,还可以让一写多用,避免写重复代码,例如:记录接口耗时,记录接口日志,接口权限&…

python 自动化模块 - pyautogui初探

python 自动化模块 - pyautogui 引言一、安装测试二、简单使用三、常用函数总结 引言 在画图软件中使用pyautogui拖动鼠标,画一个螺旋式的正方形 - (源码在下面) PyAutoGUI允许Python脚本控制鼠标和键盘,以自动化与其他应用程序的交互。API的设计非常简…

限流算法之流量控制的平滑之道:滑动时间窗算法

文章目录 引言简介优点缺点样例样例图样例代码 应用场景结论 引言 在互联网应用中,流量控制是一个重要的组件,用于防止系统过载和保护核心资源。常见的限流算法包括固定窗口算法和滑动时间窗算法。本文将重点介绍滑动时间窗算法,并分析其优缺…

基于Abaqus的三种钢筋混凝土梁数值模拟对比研究

混凝土结构抗压强度高,而抗拉强度大约只有其十分之一,在受到竖向荷载(包括自重)作用下,梁下部会产生拉应力,上部产生压应力,而由于其抗拉强度低,因此很小的荷载即可导致梁下部开裂&a…

Mysql中的日志系统

文章目录 1. 慢查询日志(Slow Query Log)1.1 是否开启慢查询日志1.2 开启慢查询日志,设置时间阈值1.2.1 修改文件my.ini1.2.2 重启mysql后配置生效 1.3 查看慢查询日志1.3.1 直接用文本编辑器打开1.3.2 使用mysqldumpslow进行分析 2. InnoDB …

C语言从入门到实战——文件操作

文件操作 前言一、 为什么使用文件二、 什么是文件2.1 程序文件2.2 数据文件2.3 文件名 三、 二进制文件和文本文件四、 文件的打开和关闭4.1 流和标准流4.1.1 流4.1.2 标准流 4.2 文件指针4.3 文件的打开和关闭4.4 文件的路径 五、 文件的顺序读写5.1 顺序读写函数介绍fgetcfp…

【音视频原理】图像相关概念 ③ ( RGB 色彩简介 | RGB 排列 | YUV 色彩简介 | YUV 编码好处 )

文章目录 一、RGB 色彩1、RGB 色彩简介2、RGB 排列 二、YUV 色彩1、YUV 色彩简介2、YUV 编码好处 一、RGB 色彩 1、RGB 色彩简介 RGB 是 计算机 中的 颜色编码方法 , 红 ( R ) / 绿 ( G ) / 蓝 ( B ) 三个颜色通道 可以设置不同的值 , 每个 通道 的 颜色值都可以取值 0 ~ 255 ,…

【已解决】namespace “Ui“没有成员 xxx

先说笔者遇到的问题,我创建一个QWidget ui文件,然后编辑的七七八八后,想要用.h与.cpp调用其,编译通过,结果报了这个错误,本方法不是普适性,但是确实解决了这个鸟问题。 问题来源 搭建ui后&…

数据分析师不加班的秘密,三行代码教你Python自动发送邮件

作为一名数据分析师,每天除了做数据日报,还要编写邮件正文和添加数据日报附件,发送给对应的负责人及销售个人,一般一封邮件应包含邮箱账户名、邮箱密码、发送人邮箱、邮件主题以及邮件正文。 本文借助Python工具,使用y…

MyBatis框架基础到进阶

1、为什么要学习MyBatis 如果没有MyBatis框架,我们依靠JDBC和连接池已经能够很好的和数据库进行交互了,而学习MyBatis框架最核心的原因是为了减少SQL语句对代码的侵入性。 因为在过往不管是使用连接池还是JDBC Templete,所有的SQL语句都写在代…

java.sql.SQLException: Failed to fetch schema of XXX 问题

遇到问题:java.sql.SQLException: Failed to fetch schema of pay_record表 i.s.r.d.s.s.c.AbstractTableMetaCache : get table meta of the table pay_record error: Failed to fetch schema of pay_record 原因分析: springcloud项目中使用了se…

上海亚商投顾:沪指冲高回落 旅游板块全天强势

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指昨日冲高回落,创业板指跌近1%,北证50指数跌超3%。旅游、零售板块全天强势&#xf…

python类继承之__init__函数覆盖问题

目录 1.问题描述 2.代码演示 3.总结 在Python这个广受欢迎的编程语言中,类继承是一项强大而精巧的特性。通过类继承,我们可以构建出更加灵活、可重用和易维护的代码,同时实现代码的模块化和扩展性。 但是如果对于熟悉C和java的人而言&…

R语言学习 case2:人口金字塔图

step1&#xff1a;导入库 library(ggplot2) library(ggpol) library(dplyr)step2&#xff1a;读取数据 data <- readxl::read_xlsx("data_new.xlsx", sheet 1) datareadxl::read_xlsx() 是 readxl 包中的函数&#xff0c;用于读取Excel文件。 step3&#xff1…

ckman:非常好用的ClickHouse可视化集群运维工具

概述 什么是ckman ckman&#xff0c;全称是ClickHouse Management Console&#xff0c; 即ClickHouse管理平台。它是由擎创科技数据库团队主导研发的一款用来管理和监控ClickHouse集群的可视化运维工具。目前该工具已在github上开源&#xff0c;开源地址为&#xff1a;github…