08.oracle的表

oracle的表

  • 一、与表相关的几个概念
  • 二、表的几种类型包括:
  • 三、对表的一些基本操作

一、与表相关的几个概念

  1. 高水位线(High Water Mark):是指表中已经被使用的空间的最高位置。当表中的数据被删除或更新时,高水位线不会立即下降,导致表中有一些空间被浪费。可以通过重新组织表或者压缩表来降低高水位线。
    oracle中高水位线永远不会下降,除非使用rebuild、truncated或shrunk这个对象

    高水位线是一个很有趣的概念,但是也是一个非常重要的概念。 顾名思义,高水位线有点
    类型于水文监测站里测水深度的标杆一样,当水涨的时候,水位线随之上升,并在标杆留
    下一个水印痕,这个水印痕就是高水位线。
    
  2. PCTFREE:是表中每个数据块保留的空闲空间的百分比。例如,如果PCTFREE设置为20%,那么每个数据块将保留20%的空闲空间,以便在将来插入新数据时可以直接使用而不需要重新分配空间。(表示当数据块的可用空间低于20%后,就不可以被insert了,只能被用于update)

  3. PCTUSED:是表中每个数据块被使用的最小百分比。例如,如果PCTUSED设置为40%,那么每个数据块至少要被40%的数据填充才会被认为是“已使用”。

二、表的几种类型包括:

  • 普通表:普通表是最基本的表,它存储数据的方式是行模式,数据存储在磁盘上。

  • 分区表:分区表是将表按照一定的规则分成多个子表,每个子表称为一个分区,可以提高查询效率和维护性能。

  • 索引组织表IOT:索引组织表是一种特殊的表,它的数据存储方式是按照索引的结构来组织的,数据和索引存储在一起,可以提高查询效率。

  • 簇表:簇表是将具有相同或者相近的列值存储在一起的表,可以提高查询效率。

  • 临时表:临时表是用于存储临时数据的表,它的生命周期只在当前会话或者事务中,当会话或者事务结束时,临时表的数据就会被清空。

  • 嵌套表、对象表:嵌套表和对象表是Oracle中的一种高级数据类型,它们允许在表中存储复杂的数据结构,比如嵌套表可以存储数组,对象表可以存储对象。这些数据类型可以提高数据的表达能力和灵活性。

需要创建簇表来提高访问速度的情况包括:

  • 当需要频繁地进行范围查询时,例如按照日期范围或者数字范围进行查询。
  • 当需要频繁地进行连接操作时,例如将两个表按照某个列进行连接查询。
  • 当需要频繁地进行排序操作时,例如对某个列进行排序查询。

三、对表的一些基本操作

在Oracle 11g中,可以使用SQL语句来创建、分配空间、移动、收缩、截断、删除表以及删除列。下面是对每个操作的代码示例:

  1. 创建表:

    CREATE TABLE employees (employee_id NUMBER(6),first_name VARCHAR2(50),last_name VARCHAR2(50),email VARCHAR2(100),hire_date DATE,salary NUMBER(8,2)
    );
    
  2. 给表分配空间:

    ALTER TABLE employeesSTORAGE (INITIAL 1M NEXT 1M);
    
  3. 移动表:

    Oracle 11g中的MOVE TABLE命令可以将一个表或分区移动到另一个表空间中。它的作用可以是为了优化表的存储,例如将一个大表移动到一个更大的表空间中,或者将一个频繁访问的表移动到更快的磁盘上,以提高查询性能。MOVE TABLE命令也可以用于重建表,例如将表从一个表空间中移动到另一个表空间中,并在此过程中重新组织表的数据、索引等。

    MOVE TABLE命令的优点包括:
    1. 优化存储:可以将表或分区移动到更适合它的表空间中,从而提高存储效率。
    2. 重建表:可以在移动表的同时重建表的结构,例如重新组织数据、索引等,以提高查询性能。
    3. 数据迁移:可以将数据从一个表空间中迁移到另一个表空间中,以便在不同的存储介质上存储数据。MOVE TABLE命令的缺点包括:
    1. 需要大量的系统资源:移动大表或分区需要大量的系统资源,包括CPU、内存和磁盘空间等。
    2. 可能会导致表的不可用:在移动表的过程中,表可能会暂时不可用,从而影响系统的正常运行。
    

    下面是一个简单的示例,演示如何使用MOVE TABLE命令将一个表移动到另一个表空间中:

    -- 创建一个表
    CREATE TABLE mytable
    (id NUMBER,name VARCHAR2(50)
    )
    TABLESPACE users;-- 插入数据
    INSERT INTO mytable (id, name)
    VALUES (1, 'John');-- 移动表到新的表空间中
    ALTER TABLE mytable MOVE TABLESPACE new_users;-- 查询数据
    SELECT * FROM mytable;
    

在这个示例中,我们创建了一个名为mytable的表,并将其存储在users表空间中。然后,我们使用MOVE TABLE命令将表移动到new_users表空间中。在移动表的过程中,Oracle会将表的数据和索引重新组织,以便更好地适应新的存储环境。

  1. 收缩表:

    ALTER TABLE employeesENABLE ROW MOVEMENT;ALTER TABLE employeesSHRINK SPACE;
    
  2. 截断表:

    TRUNCATE TABLE employees;
    
  3. 删除表:

    DROP TABLE employees;
    
  4. 删除列:

    ALTER TABLE employeesDROP COLUMN email;
    
  5. 对于簇表的创建,可以使用以下示例代码:

    CREATE CLUSTER emp_cluster(employee_id NUMBER(6))SIZE 1024SINGLE TABLEHASHKEYS 20;CREATE TABLE employees(employee_id NUMBER(6),first_name VARCHAR2(50),last_name VARCHAR2(50))CLUSTER emp_cluster(employee_id);
    

需要注意的是,在实际使用中,创建簇表需要根据具体的业务需求和数据访问模式来决定是否使用簇表。

  1. 索引组织表的创建

    索引组织表(Index-Organized Table,IOT)是Oracle数据库中的一种特殊表,它的数据存储方式是按照索引的结构来组织的。与普通表不同,索引组织表的数据和索引存储在一起,而不是分开存储。这种存储方式可以提高查询效率,特别是对于范围查询和覆盖索引查询。

    在创建索引组织表时,需要定义一个主键,并且主键的列会被用作索引的键。索引组织表的数据行按照主键的值顺序存储在索引中,这样相邻的数据行会存储在相邻的索引页中,这样可以提高范围查询的性能。此外,由于数据和索引存储在一起,因此在进行覆盖索引查询时,不需要额外的IO操作,也可以提高查询效率。

    下面是一个简单的示例,演示如何创建一个索引组织表:

    -- 创建索引组织表
    CREATE TABLE employees_iot
    (employee_id NUMBER(6) PRIMARY KEY,first_name VARCHAR2(50),last_name VARCHAR2(50),email VARCHAR2(100),hire_date DATE,salary NUMBER(8,2)
    )
    ORGANIZATION INDEX;-- 插入数据
    INSERT INTO employees_iot (employee_id, first_name, last_name, email, hire_date, salary)
    VALUES (1, 'John', 'Doe', 'john@example.com', '01-JAN-2020', 5000);-- 查询数据
    SELECT * FROM employees_iot;
    

在这个示例中,我们创建了一个名为employees_iot的索引组织表,定义了employee_id作为主键。在插入数据和查询数据时,可以发现索引组织表的使用方式与普通表略有不同,但由于数据存储在索引中,因此可以提供更高效的访问性能。

  1. 分区表的创建

    在Oracle 11g中,分区表是一种特殊的表结构,它将表数据分割成多个部分,每个部分称为一个分区。分区表可以根据特定的分区键(例如日期、范围、列表等)将数据存储到不同的物理存储结构中,从而提高查询性能、管理数据和维护数据的效率。

    分区表的主要优点包括:
    1. 查询性能优化:可以只查询特定分区的数据,而不需要扫描整个表,从而提高查询效率。
    2. 管理数据:可以更方便地管理大量数据,例如可以定期删除旧数据或者将历史数据归档到不同的存储介质中。
    3. 提高维护效率:可以针对特定分区执行维护操作,例如重建索引或者进行数据压缩。
    

    下面是一个简单的示例,演示如何创建一个基于日期范围的分区表:

    -- 创建分区表
    CREATE TABLE sales
    (sales_id NUMBER,sales_date DATE,amount NUMBER
    )
    PARTITION BY RANGE (sales_date)
    (PARTITION sales_q1 VALUES LESS THAN (TO_DATE('01-APR-2022', 'DD-MON-YYYY')),PARTITION sales_q2 VALUES LESS THAN (TO_DATE('01-JUL-2022', 'DD-MON-YYYY')),PARTITION sales_q3 VALUES LESS THAN (TO_DATE('01-OCT-2022', 'DD-MON-YYYY')),PARTITION sales_q4 VALUES LESS THAN (MAXVALUE)
    );-- 插入数据
    INSERT INTO sales (sales_id, sales_date, amount)
    VALUES (1, TO_DATE('15-JAN-2022', 'DD-MON-YYYY'), 1000);-- 查询数据
    SELECT * FROM sales;
    

在这个示例中,我们创建了一个名为sales的分区表,根据sales_date字段进行范围分区。表被分为四个分区,分别对应四个季度。在插入数据和查询数据时,可以根据特定的分区键进行操作,从而提高查询性能和管理数据的效率。

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

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

相关文章

Go使用命令行输出二维码

引言 二维码(QR code)是一种矩阵条码的标准,广泛应用于商业、移动支付和数据存储等领域。在开发过程中,我们可能需要在命令行中显示二维码,这可以帮助我们快速生成和分享二维码信息。本文将介绍如何使用Go语言生成二维…

【SpringBoot】SpringBoot自动配置底层源码解析

概述 EnableAutoConfiguration源码解析SpringBoot常用条件注解源码解析SpringBoot之Mybatis自动配置源码解析SpringBoot之AOP自动配置源码解析SpringBoot Jar包启动过程源码解析 DeferredImportSelector接口 DeferredImportSelector和ImportSelector的区别在于: …

Ubuntu2204 搭建TFTP 服务

安装软件 sudo apt-get install tftp-hpa tftpd-hpa xinetd配置服务 配置tftp sudo vim /etc/xinetd.d/tftp 填入以下参数,/home/tftp 换成自己的共享目录 server tftp {socket_type dgramprotocol udp wait yes user rootserver /usr/sbin/in.tftpdserver_…

windows远程桌面登录ubuntu,黑屏闪退,

首先需要安装xrdp以后才能远程登录,安装命令 sudo apt-get install xrdp 这里需要注意一个问题,如果在ubuntu 本地登录的情况下,windows远程登录会出现黑屏甚至闪退的问题。原因是本地登录和远程登陆是互斥的,本地登录了就不能远…

Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks - 翻译学习

知识密集型NLP任务的检索增强生成 - 论文学习 文章目录 Abstract1 Introduction2 Methods2.1 Models2.2 Retriever: DPR2.3 Generator: BART2.4 Training2.5 Decoding 3 Experiments3.1 Open-domain Question Answering3.2 Abstractive Question Answering3.3 Jeopardy Questio…

java内部类初探

引言 内部类是定义在另一个类中的类,它曾经对于简洁地实现回调非常重要,不过今天lambda表达式在这方面可以做的更好。但内部类对于某些结构的构建还是很有用的。 普通内部类 常规的内部类有以下两个特点: 1.内部类可以对除了自己的外部类以…

医疗器械维修工程师必须重视的方面

彩虹医疗器械维修技能培训开班报名中 长期班低至五折, 打破常规培训模式轻松愉快技术学习! 两个多月时间,提升自我! 点击进入 彩虹实训基地 理论实践结合教学 小班授课 立即咨询 1 工程师须重视 在医疗行业中,…

青少年编程学习 等级考试 信奥赛NOI/蓝桥杯/NOC/GESP等比赛资料合集

一、博主愚见 在当今信息技术高速发展的时代,编程已经成为了一种必备的技能。随着社会对于科技人才的需求不断增加,青少年编程学习正逐渐成为一种趋势。为了更好地帮助青少年学习编程,提升他们的技能和素质,博主结合自身多年从事青…

MacOS下VMware Fusion配置静态IP

前言 在虚拟机安装系统后,默认是通过DHCP动态分配的IP,这会导致每次重启虚拟机ip都可能会改变,使用起来会有很多不便。 配置静态IP 查看主机网关地址 cat /Library/Preferences/VMware\ Fusion/vmnet8/nat.conf 查看主机DNS,m…

宿主机无法连接docker里的redis问题解决(生产环境慎用)

宿主机无法连接docker里的redis问题解决(生产环境慎用) 问题描述解决方案 问题描述 1.连接超时 2.连接能连上但马上断开并报错 3.提示保护模式什么的 (error) DENIED Redis is running in protected mode because protected mode is enabled链接redis …

OpenCV压缩保存图像

imwrite 1.JPG格式图片是自带压缩的 IMWRITE_JPEG_QUALITY For JPEG, it can be a quality from 0 to 100 (the higher is the better). Default value is 95. IMWRITE_JPEG_PROGRESSIVE Python: cv.IMWRITE_JPEG_PROGRESSIVE Enable JPEG features, 0 or 1, default is…

总结MYSQL中VHARCHAR和TEXT

前几天在设计表结构时,针对表中的一个字段使用text还是使用varchar是受到了开发同学的挑战。本篇文章对text和varchar的区别做个总结。 VHARCHAR和TEXT对比 char(n)varchar(n)中括号中n代表字符的个数,并不代表字节个数,所以当使用了中文的…

笔记本分屏怎么操作?3个方法提高工作效率!

“有朋友知道笔记本怎么才能实现分屏吗?我在工作时,经常需要来回切换屏幕,效率真的太低了,有什么方法可以实现两个屏幕同时使用吗?” 在现代生活中,多任务处理已成为常态,而笔记本分屏技术为用户…

电脑监控软件丨功能详情丨特点分析

电脑监控软件的出现,是在信息技术的飞速发展以及计算机使用的普及的背景下产生的。随着计算机在企业、学校以及家庭等各个场所的广泛使用,管理和保护计算机数据安全的问题变得越来越重要。因此,电脑监控软件应运而生,旨在帮助用户…

DaoWiki(基于Django)开发笔记 20231114-阿里云mysql外部访问

文章目录 创建mysql用户,用户远程访问配置阿里云安全策略下载安装mysql workbench 创建mysql用户,用户远程访问 创建用户 CREATE USER dao_wiki% IDENTIFIED BY password;授权访问dao_wiki数据库 GRANT ALL PRIVILEGES ON dao_wiki.* TO dao_wiki%; F…

浅谈掌动智能验收测试主要服务内容

所谓验收测试是对软件的功能性、性能效率、兼容性、易用性、可靠性、信息安全性、维护性、可移植性进行测试,对产品说明、用户文档集进行审阅,为科研项目、信息工程项目等进行第三方验收评测,交付验收测试报告。本文将介绍掌动智能验收测试主…

Rust 中的引用与借用

目录 1、引用与借用 1.1 可变引用 1.2 悬垂引用 1.3 引用的规则 2、slice 类型 2.1 字符串字面量其实就是一个slice 2.2 总结 1、引用与借用 在之前我们将String 类型的值返回给调用函数,这样会导致这个String会被移动到函数中,这样在原来的作用域…

Python数据结构: 列表(List)详解

在Python中,列表(List)是一种有序、可变的数据类型,被广泛用于存储和处理多个元素。列表是一种容器,可以包含任意数据类型的元素,包括数字、字符串、列表、字典等。本文将深入讨论列表的各个方面&#xff0…

TCP连接出现大量CLOSE_WAIT不回收的问题排查

背景 日常运维过程中,收到“应用A”突然挂起没有处理请求的告警,然后触发“存活检查”不通过,自动重启了。 问题 为什么“应用A”突然挂起? 分析 排查过程很长,走了很多弯路,这里只列出本案例有效行动…

K8S知识点(八)

(1)实战入门-Label 通过标签实现Pod的区分,说白了就是一种标签选择机制 可以使用命令是否加了标签: 打标签: 更新标签: 筛选标签: 修改配置文件,重新创建一个pod 筛选&#xff1…