118-Linux_数据库_索引

news/2024/10/30 15:30:37/

文章目录

  • 一.索引是什么?
  • 二.索引为什么选择b+树
  • 三.测试索引
    • 1.在mysql中创建数据库 test_indexdb
    • 2.在test_indexdb中创建表 test_index
    • 3.运行程序向表中插入1万条数据,都是字符串
    • 4. 查询验证

一.索引是什么?

索引是一种特殊的文件,它包含着对数据表里所有记录的引用指针。简单讲,就像一本书前面的目录,能加快查询速度。

  • 索引是帮助mysql高效获取数据的数据结构
  • 索引存储在文件系统中
  • 索引的文件存储形式与存储引擎有关
  • 索引文件的结构

二.索引为什么选择b+树

B-Tree 通常意味着所有的值都是按顺序存储的,并且每一个叶子页到根的距离相同。下图展示了 B-Tree 索引的抽象表示,大致反映了InnoDB 索引是如何工作的。MyISAM使用的结构有所不同,但基本思想是类似的。
在这里插入图片描述

B-Tree索引能够加快访问数据的速度,因为存储引擎不再需要进行全表扫描来获取需要的数据,取而代之的是从索引的根节点 (图示并未画出) 开始进行搜索。根节点的槽中存放了指向子节点的指针,存储引擎根据这些指针向下层查找。通过比较节点页的值和要查找的值可以找到合适的指针进入下层子节点,这些指针实际上定义了子节点页中值的上限和下限。最终存储引擎要么是找到对应的值,要么该记录不存在。

三.测试索引

1.在mysql中创建数据库 test_indexdb

在这里插入图片描述

2.在test_indexdb中创建表 test_index

在这里插入图片描述

3.运行程序向表中插入1万条数据,都是字符串

代码如下

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <mysql/mysql.h>
int main()
{
MYSQL mysql_conn;
MYSQL * mysql = mysql_init(&mysql_conn);
if ( mysql == NULL )
{
printf("init err\n");
exit(1);
}
mysql =
mysql_real_connect(mysql,"localhost","root","Abc_111111","test_indexdb",3306,NUL
L,0);
if ( mysql == NULL )
{
printf("connect err\n");
exit(1);
}
char sql_buff[128] = {0};
for( int i = 0;i < 10000; i++ )
{
sprintf(sql_buff,"insert into test_index values('test-%d')",i);
if ( mysql_query(mysql,sql_buff) != 0 )
{
printf("insert into err\n");
break;
}
}
mysql_close(mysql);
}

在这里插入图片描述

4. 查询验证

开启运行时间监测

set profiling=1;

查找一条数据 : test-9999

select * from test_index where title='test-9999';

查看执行的时间:

show profiles;

为表test_index的title列创建索引:

create index title_index on test_index(title(20));

执行查询语句后,再次查看执行时间
在这里插入图片描述
删除索引

drop index t_index on test_index;

http://www.ppmy.cn/news/61415.html

相关文章

Docker虚拟化概念

Docker虚拟化概念 1、虚拟化技术的概念 虚拟化技术主要是将物理资源转变为逻辑上可以管理的资源&#xff1b;用以打破物理资源结构之间的壁垒&#xff1b;让计算的原件运行在虚拟的基础之上&#xff1b;而不是直接运行在硬件设备资源上&#xff1b; 说白了就是硬件资源转变成…

考研机试刷题第二天:任意进制转任意进制【高进度短除法】

理一下思路&#xff1a; 看了y总的视频之后我觉得这道题其实只需要对上次写的进制转换微微做一下调整即可。 于是我写出了下面的代码 #include <iostream> #include <vector> #include <algorithm> #include <cstring>using namespace std;vector<…

精品:Stimulsoft Forms 2023.2.2

Stimulsoft Forms 是一种用于创建、编辑、填写、发布、分发交互式表单和收集结果的工具。我们的产品可嵌入到应用程序中&#xff0c;并允许您创建各种自定义填充模板。丰富的功能使模板具有真正的交互性。用户会收到 PDF 格式的可填写表格&#xff0c;他们可以在任何支持此格式…

【性能设计篇】性能设计-缓存

前言 在分布式系统中&#xff0c;最耗费性能的地方就是数据库&#xff0c;而对于数据库的操作基本上就是添加&#xff0c;修改&#xff0c;删除和查询&#xff0c;对于前3者来说&#xff0c;基本上不会出现性能瓶颈。最耗费性能的地方就是查询了&#xff0c;对于查询有join、w…

Axure教程——用中继器制作动态柱状图

今天作者就教大家在Axure里面如何用中继器做一个可以动态的柱状图。 制作完成之应具备以下交互效果&#xff1a; 1.在中继器表格中填写具体数据和坐标轴后&#xff0c;自动生成对应的柱状图 2.鼠标移动到每项&#xff0c;显示其数据 预览地址&#xff1a;https://tj4v11.axshar…

让Python也能读取yaml配置

在 Python 中&#xff0c;可以使用 PyYAML 库来解析和生成 YAML 格式的配置文件&#xff0c;以实现环境配置。以下是一个使用 PyYAML 库读取 YAML 配置文件并将其应用到应用程序中的 Python 代码示例&#xff1a; 安装 PyYAML 库 pip install pyyaml创建 YAML 配置文件 # co…

射频功率放大器在S180肿瘤细胞膜研究中的应用

实验名称&#xff1a;聚焦超声对S180肿瘤细胞膜理化性质的影响 研究方向&#xff1a;生物医疗 测试目的&#xff1a; 细胞膜是细胞生命活动中有着复杂功能的重要结构其基本作用在于维持细胞内外环境的相对稳定而其通透性、完整性及流动性等理化性质则与胞内外信息传递、物质…

天梯赛L1-001 ~ 010

&#x1f442; White Lie - Jhameel - 单曲 - 网易云音乐 &#x1f442; 丁丁猫儿 - 施鑫文月 - 单曲 - 网易云音乐 今年蓝桥 / 天梯都陪跑&#xff0c;希望明年&#xff0c;蓝桥杯省一&#xff08;CA组60分&#xff09;&#xff0c;天梯赛国三&#xff08;180分&#xff09;…