哈工大 大数据 数据库实验(3) 物理数据库设计--索引结构

news2024/11/28 12:44:19

指导书:

HIT邹老师数据库实验三资源-CSDN文库

导入数据库 

 操作

两个元组的分布规律

 1.查询元组的数据分布

SELECT COUNT(*) FROM Foo;
SELECT COUNT(*) FROM Foo WHERE id = 0;
SELECT COUNT(*) FROM Foo WHERE a = 0;
SELECT COUNT(*) FROM Foo WHERE b = 0;
SELECT COUNT(*) FROM Foo WHERE c = 0;

 2.FooIdx上创建如下索引:

文件里已经建完了 导入文件会报错

CREATE INDEX idx_a_b_c ON FooIdx(a, b, c);
CREATE INDEX idx_b_c ON FooIdx(b, c);
CREATE INDEX idx_tag ON FooIdx(tag);
CREATE INDEX idx_tag4 ON FooIdx(tag(4)); --该索引可以在MySQL上创建,但⽆法在PostgreSQL上创建

查看索引

 3.FooFooIdx上分别执⾏⼀系列查询,测量每个查询的执⾏时间,⽐较同⼀个查询在哪个表上执⾏得更快。

进行两种查询

source 路径 执行更快
SELECT * FROM Foo WHERE b = 123 AND c = 23;
SELECT * FROM FooIdx WHERE b = 123 AND c = 23;

 左边为为增加索引 右边是增加索引的查询时间

 -- 搜索键等值⽐较

  1. 对于foo中没有索引的扫描查看查询计划,possible key = NULL表明他没有可能在查询的时候建立索引。所以foo只能做扫描。
  2. 由于fooidx中有bc的索引所以查找速度很快,否则 比如他只有abc索引但是他只需要查找bc,b在存储空间中是连续存放的 所以可以加快查找速度。type是ref代表他在查询的时候并没有做前端扫描,possible key = idx_b_c(b,c) 
  3. 另外key_len是10的原因: 4+4+1+1

 -- 搜索键前缀等值⽐较

不是前缀比较 因为他得先寻找b的值 但是c是连续的同时b不一定是连续,所以索引可能失效。

  1. 对于第一个查询,由于foo上没有建立索引,所以只能全程扫描
  2. 对于第二个查询,通过查看查询计划发现他使用的key_len是5,说明只扫描了前五位,也就是一个int字节+1
  3. 为了进一步验证前缀作为主顺序我们用后缀进行查询,通过查询计划发现他没有索引只能全程扫描。

EXPLAIN SELECT * FROM Foo WHERE b = 123;
EXPLAIN SELECT * FROM FooIdx WHERE b = 123;
EXPLAIN SELECT * FROM FooIdx WHERE c = 23; -- ⾮前缀

 -- 索引键值前缀⽐较

  • 如果小于等于四位就用tag4前四位索引
  • 如果大于就用tag索引

EXPLAIN SELECT * FROM Foo WHERE tag LIKE '00123%';
EXPLAIN SELECT * FROM FooIdx WHERE tag LIKE '00123%'; -- MySQL: 使⽤前缀索引; PostgreSQL:
使⽤顺序扫描

 -- 多属性索引键的限制

  • 如果范围比较大那么做索引就没有意义,这是DBMS性质决定的
  • 如果是小范围的话建立索引的数据库会利用索引值进行查询。
EXPLAIN SELECT * FROM Foo WHERE b BETWEEN 123 AND 234;
EXPLAIN SELECT * FROM FooIdx WHERE b BETWEEN 123 AND 134;
EXPLAIN SELECT * FROM FooIdx WHERE b = 123 AND c BETWEEN 23 AND 45;

  1.  key_len是5 说明只使用了b作为索引 只根据b值 查找相应的c,讲查找到的c和24做比较 所以dbms很懒
  2. 对于第二个他跳过 了中间属性 不能使用中间的值,使得中间的值可能被打乱所以不能跳过中间的值,只能单一的使用前缀作为索引。
-- 多属性索引键的限制
EXPLAIN SELECT * FROM FooIdx WHERE b = 123 AND c + 1 = 24; -- 不能与表达式进⾏⽐较
EXPLAIN SELECT * FROM FooIdx WHERE a = 1234 AND c = 34; -- MySQL: 不能跳过中间属性;

EXPLAIN SELECT * FROM FooIdx WHERE a = 1234 AND b BETWEEN 234 AND 345 AND c = 34; -- 特别神奇,需要查点资料

-- 覆盖索引
EXPLAIN SELECT c FROM FooIdx WHERE b = 123;
EXPLAIN SELECT a FROM FooIdx WHERE b = 123; -- ⽆法覆盖
EXPLAIN SELECT id FROM FooIdx WHERE b = 123;

覆盖索引使得函数返回不需要回表了。 

-- 索引合并
EXPLAIN SELECT * FROM FooIdx WHERE tag LIKE '001234%' OR b = 56; -- MySQL: 使⽤索引合并;

访问时tag真正是idx_tag和idx_b_c并集得到元组的地址 先排序后归并using where 

-- ⾮聚簇索引
EXPLAIN SELECT * FROM FooIdx WHERE b BETWEEN 123 AND 134;
EXPLAIN SELECT * FROM FooIdx WHERE b BETWEEN 123 AND 234; -- MySQL: 范围过⼤,查询优化器没⽤索引; PostgreSQL: ⽤索引

-- 前缀索引
EXPLAIN SELECT * FROM FooIdx WHERE tag LIKE '00123%'; -- MySQL: 使⽤前缀索引; PostgreSQL:使⽤顺序扫描
EXPLAIN SELECT * FROM FooIdx WHERE tag LIKE '0012%'; -- MySQL: 使⽤前缀索引; PostgreSQL:使⽤顺序扫描

 

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

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

相关文章

c++ 解析html与htmlcxx库

目录 1,htmlcxx Github 版本源码下载 2,htmlcxx Linux 版本源码下载 3,htmlcxx 解析例子 1,htmlcxx Github 版本源码下载 正如在前一篇文章 c CFile 类 里提到的,我想要从指定的 html 文件里提取…

【裸机开发】镜像文件内部信息构成

由于当前使用的是裸板,没有OS,DDR的初始化、文件保存地址都尚未确定,所以我们生成二进制文件以后,是无法直接放到开发板上运行的。 因此,我们一般会在二进制文件之前加一些头部信息,这些头部信息会告诉开发…

xsync集群分发脚本

脚本: #!/bin/bash #1. 判断参数个数 if [ $# -lt 1 ] thenecho Not Enough Arguement!exit; fi #2. 遍历集群所有机器 for host in hadoop02 hadoop03 doecho $host #3. 遍历所有目录,挨个发送for file in $do#4. 判断文件是否存在if [ -e $file ]th…

文本三剑客awk:命令讲解

awk-命令讲解: 一、awk: 1.定义: (1)在 Linux/UNIX 系统中,awk 是一个功能强大的编辑工具,逐行读取输入文本,默认以空格或tab键作为分隔符作为分隔。并按模式或者条件执行编辑命令…

006-从零搭建微服务-注册中心(二)

写在最前 如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址:https://gitee.com/csps/mingyue 文档地址:https://gitee.com/csps/mingyue/wikis 核心依赖 需要注册配置中心的服务引入下面 …

步进电机基本原理及驱动方式详解

步进电机基本原理及驱动方式详解 步进电机相关概念基本原理类型和结构转子结构定子结构 励磁方式ATD9800 驱动使用实例 参考文献 步进电机相关概念 步进电机是一种常用于控制和定位应用的电动机,其独特的工作方式使其在许多领域中都具有广泛的应用。步进电机以其 精…

正态总体下常见的抽样分布

1.正态总体下常见的抽样分布 本人博客:总体分布、样本分布、抽样分布的区别 本人博客:三大抽样分布 正态总体下常见的抽样分布意思是:样本来自服从正态分布的总体中,从样本中抽样后得到的分布 1.1 单个正态总体下的抽样分布&…

【高危】GitLab CE/EE 存在存储型XSS漏洞

漏洞描述 GitLab 是一款基于Git的代码托管、版本控制、协作开发平台。 在 GitLab CE/EE 15.11 至 15.11.6 版本以及 16.0 至 16.0.1 版本中,当GitLab导入GitHub仓库时,如果GitHub仓库中包含由用户构造的恶意JavaScript代码的标签颜色,解析这…

为什么说程序员和产品经理一定要学一学PMP

要回答为什么说程序员和产品经理一定要学一学PMP?我们得先看一下PMP包含的学习内容。PMP新版考纲备考参考资料绝大多数涉及IT项目的敏捷管理理念。主要来源于PMI推荐的10本参考书: 《敏捷实践指南(Agile Practice Guide)》 《项目…

Java匿名内部类、invoke方法、动态代理

一、匿名内部类 匿名内部类一般作为方法的参数,这个方法的形参为接口,而实参为匿名内部类(可以理解为接口的对象)并且重写了接口中的方法。 例如: 定义了一个接口Star: 类型为Star的引用数据类型作为方法s…

关于docker中Nacos启动成功访问不了的情况

书接上回,这段时间在忙学成在线的微服务项目,上次出现了IP修改的问题,有了一定的解决方案,复制别人的虚拟机后如何修改IP_SSSEdward的博客-CSDN博客。 这次docker正常启动了,但是出现了访问不了的情况,但是…

短视频矩阵系统源码打包附赠分享

矩阵系统源码主要有三种框架:Spring、Struts和Hibernate。Spring框架是一个全栈式的Java应用程序开发框架,提供了IOC容器、AOP、事务管理等功能。Struts框架是一个MVC架构的Web应用程序框架,用于将数据模型、Web应用程序的用户界面和控制器逻…

【备战秋招】Java异常处理

Java程序在执行过程中所发生的异常事件可分为两类: Error:Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源 耗尽等严重情况。 比如:StackOverflowError和OOM。一般不编写针对性的代码进行处理。 Exception: 其它因编程错…

使用pytorch进行FFT和STFT

首先,我们定义一个波形,幅值分别为20和38,频率为2和13: y 20 sin ⁡ ( 2 π 2 x ) 38 sin ⁡ ( 2 π 13 x ) y20 \sin (2\pi \times 2x)38\sin (2\pi \times 13x) y20sin(2π2x)38sin(2π13x) 采样频率为200Hz,采…

十四届蓝桥杯省赛CB

hinhin可否不要老&#xff0c;令创新高 A 日期统计B 01 串的熵C 冶炼金属D: 飞机降落E: 接龙数列F: 岛屿个数G: 子串简写H: 整数删除I: 景区导游J: 砍树 A 日期统计 #include <bits/stdc.h> using namespace std; #define int long long int #define pii pair<int,int…

VR云探校:解锁不一样的视角,“沉浸式”打卡校园

仲夏六月&#xff0c;又是一年高考时&#xff0c; 高考首战已经正式拉开帷幕&#xff0c; 超千万考生赴考&#xff0c;更有千万考生家长花式赴考。 少年的你披星戴月走过的路&#xff0c;终将会繁华遍地&#xff0c;今天VR全景就为千万考生和家长解锁不一样的视角&#xff0…

java观察者模式例子

观察者模式&#xff1a; 是一种常用的设计模式&#xff0c;它定义了一种一对多的关系&#xff0c;让多个观察者对象同时监听某一个主题对象&#xff0c;当主题对象状态发生变化时&#xff0c;它的所有观察者都会收到通知并且自动更新。 在观察者模式中&#xff0c;主题对象通…

Minicap编译及简单使用

什么是MiniCap 官方说法&#xff1a;Minicap提供了一个套接字接口&#xff0c;用于从Android设备流式传输实时屏幕捕获数据。它旨在用作更大程序中的组件&#xff0c;因此仅凭其本身并不是非常有用。例如&#xff0c;它在STF中用于远程控制。 个人理解&#xff1a;Minicap是用…

如何检查 Android 设备是否支持 Widevine DRM

想知道您的 Android 设备是否可以流式传输来自 Netflix 和 Amazon Prime Video 的高清视频&#xff1f;这是检查 Widevine DRM 支持的方法&#xff01; 许多流媒体服务&#xff0c;如 Netflix、Disney、Hulu 等&#xff0c;使用各种类型的数字版权管理 (DRM) 来保护其内容不被…

VulnHub项目:Hogwarts dobby

靶机地址&#xff1a;Hogwarts: Dobby ~ VulnHub 哈利波特也是初中时候最喜欢的电影~Dobby多比是马尔福加的奴隶精灵&#xff0c;出现在第二部密室中&#xff0c;后来被哈利波特的袜子所拯救&#xff0c;成为了一只快乐自由的小精灵&#xff0c;最后它在死亡圣器中&#xff0c…