oracle索引

记一次位图索引“BITMAP CONVERSION FROM ROWIDS”引起的问题

独自空忆成欢 提交于 2020-03-11 18:26:00
一般的经验OLTP不建议使用位图索引,虽然位图索引可能会提高查询速度,但是如果修改有索引的数据,那索引指向的所有行都会被锁定,这是由于oracle不能锁定位图索引条目中单独的一行,而是锁定整个位图索引条目。 今天研发告诉我一个系统数据总是有问题,排查到某个查询的时候,我看了下执行计划,竟然发现了bitmap,开始还以为是建了位图索引,后来仔细一看是BITMAP CONVERSION FROM ROWIDS,才知道是在一个选择性非常差的列上建了普通索引,导致oracle优化器自动将索引转换成位图索引了。那个列上的索引其实没啥用处,仅仅是由于工程师觉得要用到这个列。如果选择性差的列需要建索引,建议 建联合索引 也能避免这个问题。 来源: CSDN 作者: 肖雪松 链接: https://blog.csdn.net/xiaofeng_rui/article/details/104796398

sqlServer2005新特性2

此生再无相见时 提交于 2020-03-11 13:11:59
1.数据库镜像 通过新数据库镜像方法,将记录档案传送性能进行延伸。您将可以使用数据库镜像,通过将自动失效转移建立到一个待用服务器上,增强您SQL服务器系统的可用性。 2.在线恢复 使用SQL2005版服务器,数据库管理人员将可以在SQL服务器运行的情况下,执行恢复操作。在线恢复改进了SQL服务器的可用性,因为只有正在被恢复的数据是无法使用的,而数据库的其他部分依然在线、可供使用。 3.在线检索操作 在线检索选项可以在指数数据定义语言(DDL)执行期间,允许对基底表格、或集簇索引数据和任何有关的检索,进行同步修正。例如,当一个集簇索引正在重建的时候,您可以对基底数据继续进行更新、并且对数据进行查询。 4.快速恢复 新的、速度更快的恢复选项可以改进SQL服务器数据库的可用性。管理人员将能够在事务日志向前滚动之后,重新连接到正在恢复的数据库。 5.安全性能的提高 SQL Server 2005包括了一些在安全性能上的改进,例如数据库加密、设置安全默认值、增强密码政策、缜密的许可控制、以及一个增强型的安全模式。 6.新的SQL Server Management Studio SQL Server 2005引入了SQL Server Management Studio,这是一个新型的统一的管理工具组。这个工具组将包括一些新的功能,以开发、配置SQL Server数据库,发现并修理其中的故障

DBEX-1-5-2014数据库开发技术

蹲街弑〆低调 提交于 2020-03-10 14:02:45
一、论述题(10分) 1)简述DBMS对SQL解析执行的步骤(2) 1语法分析:分析语句的语法是否符合规范,衡量语句中各表达式的意义 2语义分析:检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限 3视图转换:将涉及视图的查询语句转换为相应的对基表查询语句。 4表达式转换:将复杂的SQL表达式转换为较简单的等效连接表达式 5选择优化器:不同的优化器一般产生不同的“执行计划” 6选择连接方式 Oracle有三种连接方式、对多表连接Oracle可选择适当的连接方式 7选择连接顺序:对多表连接Oracle选择哪对表先连接,选择这两表中哪个表做为源数据表 8选择数据的搜索路径:根据以上条件选择合适的数据搜索路径,如是选用全表搜索还是利用索引或是其他的方式。 9运行“执行计划” 运行执行计划,返回执行结果。运行执行计划的代价根据sql语句的不同可大可小。 1:语法分析 2:权限与对象检查 3: 在共享池中检查是否有完全相同的之前完全解析好的. 如果存在,直接跳过4和5,运行Sql, 此时算soft parse. 4:选择执行计划 5:产生执行计划 2)解释硬解析和软解析的含义和区别(3) 解析:分为硬解析和软解析。 若在共享池中没有找到已有的执行计划,则进行硬解析,否则为软解析。 硬解析指使用优化器对sql语句进行优化,将sql转化为一些等价语句,并选择代价最小的语句生成执行计划;

数据仓库常见面试问题

牧云@^-^@ 提交于 2020-03-10 10:47:25
一、 数据库 1、 Oracle数据库,视图与表的区别?普通视图与物化视图的区别?物化视图的作用?materialized view 答:a:视图是虚拟表,提高了表的安全性,视图没有实际物理空间,而表有实际存储的物理空间 b:物化视图存储了实实在在的数据,而普通视图之存储了定义 c:物化视图的优点像索引一样,提高查询性能。当基表发生变化时,物化视图也应当刷新。 物化视图是数据库中的一种存储数据的对象,和表一样,存储了数据。用于预先计算并保存表连接或者聚集等耗时较多的操作。这样,在执行查询的时候,就可以避开连接、聚集等耗时的操作,从而快速的得到结果。它可以查询表,视图甚至是其他物化视图中的数据。和视图不同的是,它存储了实实在在的数据,而视图只是存储了定义而已,所以,也是可以在物化视图上创建索引的。物化视图在很多方面,和索引很相似:使用它的主要目的是为了提高查询性能;物化视图对应用是透明的,增加或者删除物化视图不会影响应用程序中查询语句的正确性和有效性;物化视图会占用存储空间;当基表发生变化时,物化视图也应当刷新。通常情况下,物化视图被称为主表(在复制期间)或者明细表(在数据仓库中)。 2、 Oracle数据库,有哪几类索引,分别有什么特点? 答:三类索引 a:B树索引 b:文本索引 c:位图索引 3、 Union与Union All的区别? Union 会去掉重复,效率比 union

Oracle移植postgreSQL系統-三、Oracle移植postgreSQL注意事項

人盡茶涼 提交于 2020-03-10 10:09:23
1 、Oracle函數偽列 Ora2pg將會把偽列創建為普通物理列,并創建相應函數、觸發器實現函數計算并將數據維護在普通物理列中。 2 、 Oracle 序列 postgreSQL 中支持smallserial 、serial、bigserial三種數據類型,系統會自動創建相關序列,并且支持直接設置默認值為nextval('seq_report_dept_info_id') 格式,此種方式較為簡便,但生成腳本中不會自動轉換。 也可參照 Orace 數據庫方式,自己手工創建序列,并在 insert 、 update 或觸發器中通過 nextval('seq_report_dept_info_id') 的方式維護數據。 3 、 Oracle Type 在 Oracle 包里定義的 cursor 、數組、 index_by 表、嵌套表等類型, ora2pg 不會自動轉換,需要手工處理。 4 、 LOB 對象 Oracle 中 clob 對象 在 postgreSQL 會自動按 text 類型創建。 並且 Oracle 中 clog 字段會自動創建索引,但 postgreSQL 中不會,因而移植后索引會少 LOB 索引。 5 、分區 Oracle 有間隔分區,數據庫會自動根據設置的間隔創建分區,但 postgreSQL 中不會自動創建分區,需要手工定期維護,或者寫定時腳本維護。 6 、索引

Oracle索引和事务

。_饼干妹妹 提交于 2020-03-09 20:34:39
Oracle索引和事务 1. 什么是索引?有什么用? 1.索引是数据库对象之一,用于加快数据的检索,类似于书籍的目录。在数据库中索引可以减少数据库程序查询结果时需要读取的数据量,类似于在书籍中我们利用索引可以不用翻阅整本书即可找到想要的信息。 2.索引是建立在表上的可选对象;索引的关键在于通过一组排序后的索引键来取代默认的全表扫描检索方式,从而提高检索效率 3.索引在逻辑上和物理上都与相关的表和数据无关,当创建或者删除一个索引时,不会影响基本的表; 4.索引一旦建立,在表上进行DML操作时(例如在执行插入、修改或者删除相关操作时),oracle会自动管理索引,索引删除,不会对表产生影响 5.索引对用户是透明的,无论表上是否有索引,sql语句的用法不变 6.oracle创建主键时会自动在该列上创建索引 2. 索引的底层实现原理 当一列索引创建成功后,oracle系统会这个列复制一个份放入缓存,并按照一定规则做排序和去重,从而减少检索数据的范围。 但是索引不是创建的越多越好,因为一个索引的创建,就需要在缓存中开辟一个空间,过多的索引反而会加重数据库的检索速度。 3. 索引的设计理念 1.某个字段在条件查询中会被高频率的调用 where 条件 2.表关联的连接字段 on 条件 3.实际业务需求 4.索引的创建是不是越多越好?为什么? 1.首先数据量小的表不需要建立索引

Oracle基本对象的操作

老子叫甜甜 提交于 2020-03-09 15:13:36
Oracle对象的操作 启动Oracle 1、启动监听(想要oracle能够远程访问到必须配置监听) 2、启动数据库 1)登录服务器,切换到Oracle用户 2)打开监听服务 lsnrctl start 3)以sys用户身份登录Oracle sqlplus /nolog conn /as sysdba; 4)通过startup命令启动 关闭Oracle 1)关闭数据库shutdown 2)关闭监听器lsnrctl stop 一、用户 1、查看所有用户: select * from dba_users; select * from all_users; select * from user_users; 2、创建用户: create user 用户名 identified by 密码; 注意刚刚创建的用户是没有任何权限的,因此需要dba给该用户进行授权; Oracle中用户建立之后是无法正常登录的,只有dba对用户分配相关的权限之后用户才可以登录。 3、给用户分配权限 grant 权限 to 用户名; 权限分为系统权限和对象权限 系统权限是数据库管理相关的权限 系统权限:create session(登录权限)、create table(创建表权限)、create index(创建索引的权限)、create view(创建视图权限)、create sequence(创建序列权限)

oracle数据库定义语句DDL

余生颓废 提交于 2020-03-07 11:02:36
1、建表语句: create table 表名(字段名 类型,字段名 类型); --删除表: drop table 表名; --修改表: alter table 表名 add 字段名 类型; --修改字段: alter table 表名 modify(字段名 类型); --重命名字段: alter table 表名 rename column 字段名 to 新字段名; --重命名表 : rename 表名 to 新表名; --删除字段: alter table 表名 drop column 字段名; 2、序列(sequence) --创建sequence create sequence 序列名 [INCREMENT BY n] [START WITH n] [{MAXVALUE/ MINVALUE n| NOMAXVALUE}] [{CYCLE|NOCYCLE}] [{CACHE n| NOCACHE}]; 其中: 1) INCREMENT BY用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表Oracle序列的值是按照此步长递减的。 2) START WITH 定义序列的初始值(即产生的第一个值),默认为1。 3) MAXVALUE 定义序列生成器能产生的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增Oracle序列

(数据库)15_其它数据库对象

ε祈祈猫儿з 提交于 2020-03-07 04:58:30
15_其它数据库对象 目 标 一、常见的数据库对象 二、序列 1.CREATE SEQUENCE 语句 2.序列相关的两个伪列(NEXTVAL 和 CURRVAL 伪列) 3.查询序列 4.使用序列 5.修改序列 5.1.修改序列的注意事项 6.删除序列 三、索 引 1.创建索引 2.什么时候创建索引 3.什么时候不要创建索引 4.删除索引 四、同义词-synonym 1.创建和删除同义词 总 结 目 标 通过本章学习,您将可以: 创建、维护和使用 序列 创建和维护索引 创建同义词 一、常见的数据库对象 二、序列 序列: 可供多个用户用来产生唯一数值的数据库对象 自动提供唯一的数值 共享对象 主要用于提供主键值 将序列值装入内存可以提高访问效率 1.CREATE SEQUENCE 语句 CREATE SEQUENCE sequence [ INCREMENT BY n ] --每次增长的数值 [ START WITH n ] --从哪个值开始 [ {MAXVALUE n | NOMAXVALUE} ] [ {MINVALUE n | NOMINVALUE} ] [ { CYCLE | NOCYCLE} ] --是否需要循环 [ {CACHE n | NOCACHE} ] ; --是否缓存登录 实例: CREATE SEQUENCE student_stutid_seq

oracle常用sql语句语法

拈花ヽ惹草 提交于 2020-03-06 09:31:44
一.数据控制语句 (DML) 部分   1.INSERT   (往数据表里插入记录的语句)   INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……);   INSERT INTO 表名(字段名1, 字段名2, ……)   SELECT 字段名1, 字段名2, …… FROM 另外的表名;   字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’   如果字段值里包含单引号’ 需要进行字符串转换, 我们把它替换成两个单引号''.   字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度校验.   日期字段的字段值可以用当前数据库的系统时间SYSDATE, 精确到秒   或者用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)   TO_DATE()还有很多种日期格式, 可以参看ORACLE DOC.   年-月-日 小时:分钟:秒 的格式YYYY-MM-DD HH24:MI:SS   INSERT时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,   方法借用ORACLE里自带的DBMS_LOB程序包.   INSERT时如果要用到从1开始自动增长的序列号, 应该先建立一个序列号   CREATE SEQUENCE