无论是什么关系型数据库,尤其在OLTP系统中,索引是提升数据访问速度的常用方式之一,但是不同类型的数据库,对索引碎片的处理可能会略有不同。...SQL Server中,索引碎片有2种形式:外部碎片和内部碎片,不管哪种碎片基本上都会影响索引内页的使用。 1. 外部碎片 当索引页不在逻辑顺序上时就会产生外部碎片。...view=sql-server-ver15 其中, FAST选项指定执行索引的快速扫描,输出结果是最小的,该选项不读索引的叶或数据页且只返回扫描页数、扫描扩展盘区数、扫描密度[最佳值:实际值]、逻辑扫描碎片...高了则说明有外部碎片。 每个扩展盘区上的平均页数(Avg. Pages per Extent):该数是扫描页数除以扫描扩展盘区数,一般是8。小于8说明有外部碎片。...这种操作的好处是通过重新排序索引页,使索引页紧凑并删除不需要的索引页来完全重建索引,因此可能在内部和外部碎片都很高的情况下才使用,以使那些索引回到它们应该在的位置。
♣ 题目部分 在Oracle中,什么是索引分裂? ♣ 答案部分 索引分裂(Index Block Split),就是索引块的分裂。...如果此时其它会话也要修改这个索引块的数据,那么将会出现索引块的竞争,等待以“enq: TX – index contention”的形式体现,该事件是一个与索引分裂直接相关的等待事件。...当索引分裂发生时,负责实施分裂的进程会持有相关的队列锁,直到该进程完成分裂操作才会释放该队列锁。在这个过程中负责分裂的进程需要找到合适的新块并将对应的数据移动到该新块中。...l 5-5分裂:当发生5-5分裂时,有一半索引记录仍存在当前块,而另一半数据移动到新的节点中,旧节点和新节点上的数据比例几乎是持平的。...& 说明: 有关索引分裂的内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2139232/ 本文选自《Oracle程序员面试笔试宝典》,作者:
大家好,又见面了,我是你们的朋友全栈君。...'; 一.oracle 表加索引 首先,查看目前已经建立的索引 select index_name from all_indexes where table_name = 'table1'; 2.接着,...下面还是用一个简单的例子述说一下该错误的来龙去脉。 ORA-02429错误的原因是因为用户试图删除一个用于强制唯一/主键的索引,解决方法也很简单,删除对应的约束就会自动删除该索引。...='TAB_TEST'; CONSTRAINT_NAME ------------------------------ PK_TAB_TEST 5:删除测试表的索引PK_TAB_TEST SQL>...oracle主键修改&设置某一字段可以为null 1.oracle主键修改 1.1)首先查看需要修改的表的主键名,默认的情况下,数据库会自动分配 select * from user_cons_columns
♣ 题目部分 在Oracle中,什么是不可见索引? ♣ 答案部分 索引维护是DBA的一项重要工作。...在Oracle 11g里,Oracle提供了一个新的特性来降低直接删除索引或者禁用索引的风险,那就是不可见索引(Invisible Indexes)。 从Oracle 11g开始,可以创建不可见索引。...不可见索引是从Oracle 11g开始出现的,所以,在Oracle 11g之前的版本中索引没有INVISIBLE的功能,那么应该如何处理呢?...现在Oracle数据库一般都采用基于成本的优化器来生成执行计划,只要索引的成本更低,Oracle就会选择使用索引,所以,只要告诉Oracle使用索引成本很高,它就不会使用这个索引,这样就达到了暂时让索引不可用的效果...,重新按现在的统计信息生成SQL执行计划。
♣ 题目部分 在Oracle中,什么是索引的选择性? ♣ 答案部分 索引的选择性(Index Selectivity,索引的选择度或索引的选择率)是指索引列中不同值的记录数与表中总记录数的比值。...索引的选择性的取值范围是[0,1]。例如,某个表的记录数是1000条,而该表的索引列的值只有900个不同的值(有100个是相同或是空),所以,该列索引的选择性为900/1000=0.9。...可以使用如下的SQL来计算索引的选择性: SELECT COUNT(DISTINCT NAME)/COUNT(*) FROM TB_A; 这种方法的优点是在创建索引前就能评估索引的选择性。...当索引被收集了最新的统计信息时,可以使用如下的SQL语句查询索引的选择性: SELECT INDEX_NAME,DISTINCT_KEYS/NUM_ROWS SELECTIVITY FROM DBA_INDEXES...选择性越接近1,那么该索引就越好。 本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。
目部分 在Oracle中,什么是SQL实时监控?...答案部分 在Oracle 11g中,V$SESSION视图增加了一些新的字段,这其中包括SQL_EXEC_START和SQL_EXEC_ID,这两个字段实际上代表了Oracle 11g的一个新特性:实时的...在Oracle 11g中,当SQL并行执行时,会立即被实时监控到,或者当SQL单进程运行时,若消耗超过5秒的CPU或I/O时间,则它也会被监控到。...V$SQL_MONITOR收集的信息每秒刷新一次,接近实时。当SQL执行完毕,信息并不会立即从V$SQL_MONITOR中删除,至少会保留1分钟。...如果监视的SQL语句发现具有全表扫描等执行计划的特征,或者CPU时间和I/O时间比较长,那么可以与SQL调优顾问接合起来,不但能获知性能瓶颈,而且能获得Oracle推荐的优化策略。
大家好,又见面了,我是你们的朋友全栈君。...创建索引一般分为在线索引和非在线索引,在线与非在线的区别:非在线锁表,优先创建索引,此时DML都被阻塞,所以快;相反,在线锁的是行而非表,通过临时表进行索引的创建,所以不会影响DML操作,但副作用就是慢...如果在生产环境操作,不停服务的话,势必导致创建索引期间仍有DML操作进来。另外如果是大表,那么采用非在线而导致锁表所带来的影响可能会很大。一句话,生产环境不停服的脚本操作,建议使用online。...DROP INDEX 索引名; 4、查看某个表的索引,表名需大写。 SELECT * FROM ALL_INDEXES WHERE TABLE_NAME = '表名' 5、查看某个表哪些列有索引。...SELECT * FROM ALL_IND_COLUMNS WHERE TABLE_NAME = '表名' 如果在where 子句中有OR 操作符或单独引用复合索引列的后面列则将不会走索引,将会进行全表扫描
大家好,又见面了,我是你们的朋友全栈君。...POLICYIMPART_INDEX ON ROOTE.W_POLICYIMPART( POLICYID ASC, IMPARTCODE ASC, CUSTOMERTYPE ASC )POLICYIMPART_INDEX索引名称...ROOTE.W_POLICYIMPART表名 oracle新增表字段 ALTER TABLE “ROOTE”....如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
判断字段是否为空一般是不会应用索引的,因为B树索引是不索引空值的。 ...实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。...DLYX.ZLYHJBQK(中间多了空格) 以上四个SQL在ORACLE分析整理之后产生的结果及执行的时间是一样的,但是从ORACLE共享内存SGA的原理,可以得出ORACLE对每个SQL 都会对其进行一次分析...b.查询表顺序的影响 在FROM后面的表中的列表顺序会对SQL执行性能影响,在没有索引及ORACLE没有对表进行统计分析的情况下ORACLE会按表出现的顺序进行链接,由此因为表的顺序不对会产生十分耗服务器资源的数据交叉...如果分析执行的路径不对首先应在数据库结构(主要是索引)、服务器当前性能(共享内存、磁盘文件碎片)、数据库对象(表、索引)统计信息是否正确这几方面分析。
发表于2019-08-212020-03-03 作者 Ryan 首先, 明确一下在MySQL 中,执行 SQL 语句流程如下(图来自网络): image.png 一条 SQL...下面来讲一下,如何定位 SQL 未走索引的原因 我们大部分情况下,使用的是 Explain 来分析 SQL 语句是否走索引,即便语法分析的时候是走了索引的,执行的时候,还是有可能没有走索引...原因到底是什么?...的的时候,对 SQL 的执行代价会有个判断,如果走索引的代价,超过不走索引,那它就放弃使用索引,也就是我们执行 SQL 时,所遇到的 explain 分析走索引,真正线上执行没有走索引的原因。...另外,网络上有大量的博文都说: 、!、!= 等非判断,是不走索引的,其实是不严谨的,或者说是错误的,真正的原因与这里说的 “执行代价分析”都是一回事。
♣ 题目部分 在Oracle中,什么是Oracle Directory?...♣ 答案部分 Oracle Directory(目录)可以让用户在Oracle数据库中灵活地对文件进行读写操作,极大地提高了Oracle的易用性和可扩展性。...TO LHR; GRANT ALL ON DIRECTORY EXP_DIR_LHR TO LHR; 需要注意的是,在创建Directory数据库对象时对应的路径不存在也不会报错,Oracle数据库并不会到操作系统上检验路径的存在性...下面给出一个创建Oracle Directory的例子: SYS@lhrdb> CREATE OR REPLACE DIRECTORY EXP_DIR_LHR AS '/tmp'; Directory...Directory的更多内容介绍可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2148694/ 本文选自《Oracle程序员面试笔试宝典》,作者
第一章 Oracle索引位图转换介绍 1.1 索引位图转换 首先介绍一下索引位图转换概念: 索引位图转换是优化器对目标表上的一个或多个目标索引执行位图布尔运算。...Oracle数据库里有一个映射函数(Mapping Function),它可以实现B树索引中ROWID和对应位图索引中的位图之间互相转换。目的是对相同ROWID做AND、OR等连接运算。...最后再将运算结果转换为ROWID并回表,这个过程在实际生产环境中的执行效率往往是有问题的,我们可以通过隐藏参数_b_tree_bitmap_plans禁掉该过程中从ROWID到位图的转换。...分析这样的优势: IN条件中多个值会分别被访问并与索引中的数据作比较,条件中的多个值也不会访问索引多次,执行效率较高。通过逻辑读部分也能确定。...回表的逻辑读十分接近。 总结: 索引位图转换的优势是减少回表次数。 OR扩展的优势是其IN-LIST迭代部分消耗逻辑读较低。
什么是SQL语言 a) SQL, Structured Query Language, 结构化查询语言 b) SQL 是最重要的关系数据库操作语言,是所有关系数据库 管理系统的标准语言....c) SQL 语言是非过程化的语言, 只需要告诉做什么, 不需要 关注怎么做, 简单....SQL语言的作用 a) 增删改查(CRUD) b) 操作数据库对象(用户, 数据库,表格, 序列, 索引…) c) 操作用户权限和角色的授予跟取消 d) 事务(Transaction)管理 分类...开始设置使用Oracle时的相关准备 设置字体 ? 关闭自动备份,避免生成同名文件 ? select基本语句 一般使用的是Oracle自带的scott用户,密码默认为tiger,不过要手动创建一下。...select distinct ename, job from emp; 6、字符串连接符 Oracle 中, 用单引号表示字符串 a) 查询所有员工的姓名, 职位和薪资, 以姓名:xxx, 职位
♣ 题目部分 在Oracle中,位图索引是什么? ♣ 答案部分 位图索引(Bitmap Indexes)是一种使用位图的特殊数据库索引。它针对大量相同值的列而创建,例如:类别、型号等。...位图索引块的一个索引行中存储的是键值(以比特位0、1的形式存储)和起止ROWID(ROWID的内容可以参考【3.2.28 ROWID和ROWNUM有什么区别?】)...,以及这些键值的位置编码,位置编码中的每一位表示键值对应的数据行的有无。一个块可能指向的是几十甚至成百上千行数据的位置。 在位图索引中,数据库为每个索引键存储一个位图。...位图索引主要用于数据仓库,或在以特定方式引用很多列的查询环境中。位图索引并不适合许多OLTP应用程序,若使用不当则容易产生死锁。 ③ 被索引的表是只读的,或DML语句不会对其进行频繁修改的表。...可以使用如下的SQL语句查询数据库中的所有位图索引: SELECT * FROM DBA_INDEXES D WHERE D.INDEX_TYPE='BITMAP'; 本文选自《Oracle程序员面试笔试宝典
♣ 题目部分 在Oracle中,压缩索引是什么? ♣ 答案部分 Oracle数据库可以使用键压缩(Key Compression)来压缩B-Tree索引或索引组织表中的主键列值的部分。...键压缩可以大大减少索引所使用的空间,使用了键压缩的索引称为压缩索引。对索引进行压缩更多的意义在于节省存储空间,减少I/O时间。...可以使用如下的SQL将索引重建为压缩或非压缩的索引: ALTER INDEX EMPLOYEE_LAST_NAME_IDX REBUILD NOCOMPRESS;--非压缩 ALTER INDEX EMPLOYEE_LAST_NAME_IDX...REBUILD COMPRESS;--压缩 所有的压缩索引可以通过如下的SQL语句获取: SELECT * FROM DBA_INDEXES D WHERE D.COMPRESSION='ENABLED...'; 本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。
♣ 题目部分 在Oracle中,函数索引是什么?...♣ 答案部分 在Oracle中,有一类特殊的索引,称为函数索引(Function-Based Indexes,FBI),它基于对表中列进行计算后的结果创建索引。...函数索引在不修改应用程序的逻辑基础上提高了查询性能。如果没有函数索引,那么任何在列上执行了函数的查询都不能使用这个列的索引。当在查询中包含该函数时,数据库才会使用该函数索引。...函数索引可以是一个B-Tree索引或位图索引。 用于生成索引的函数可以是算术表达式,也可以是一个包含SQL函数、用户定义PL/SQL函数、包函数,或C调用的表达式。...③ 创建函数索引的函数必须是确定性的。即,对于指定的输入,总是会返回确定的结果。 ④ 在创建索引的函数里面不能使用SUM、COUNT等聚合函数。
大家好,又见面了,我是你们的朋友全栈君。 A答案 ASMM(Automatic Shared Memory Management,自动共享内存管理)是Oracle 10g引入的概念。...,自动调整SGA中各个组件的内存大小。...ASMM的SGA中包含的组件及对应参数如下表所示: 在Oracle 10g中,必须将STATISTICS_LEVEL参数设置为TYPICAL(默认值)或者ALL才能启用ASMM功能,如果将其值设置为BASIC...如果使用SQL*Plus来设置ASMM,那么必须先把SGA中包含的组件的值设置为0。通过设置SGA_TARGET参数为非零值来启用ASMM功能。...所以,在Oracle 11g中,Oracle引入了AMM(Automatic Memory Management,自动内存管理)的概念,实现了全部内存的自动管理。
题目部分 在Oracle中,什么是BBED?它有哪些作用?...答案部分 BBED(Block Brower and Editor)是用来直接查看和修改Oracle数据块的一个内部工具,它可以直接修改Oracle数据文件块的内容,在一些极端恢复场景下比较有用。...因为该工具不被Oracle服务支持,所以,默认是没有生成可执行文件的,在使用前需要编译生成。...虽然BBED可以在数据库打开的状态下进行修改,但是建议在做任何修改操作之前先关闭数据库,这样可以避免CHECKPOINT进程重写BBED对BLOCK的修改,也避免Oracle在BBED修改完成之前读BLOCK...BBED的默认密码为blockedit。 在Oracle 11g下,BBED的编译文件需要从Oracle 10g下拷贝。Oracle 10g可直接编译。
,同理如果创建的是普通索引,在查询时对字段加上了函数或者表达式,都不会走索引,我们应始终避免出现这样的问题 排序索引 在涉及order by操作的sql时,b-tree索引返回的结果是有序的,可以直接返回...慢sql对数据库cpu消耗极大,严重时甚至会宕机 索引优化 子查询优化 实际的业务sql中,往往要涉及多个表进行关联查询,这里既可以使用子查询,也可以使用表连接,一般我们认为子查询方式的查询层次较多...因为支持事务,我们最常使用的是InnoDB。 虽然数据保存在磁盘中,但其处理是在内存中进行的。...由于数据在物理上只会保存一份,所以包含实际数据的聚簇索引只能有一个,这也就是为什么主键只能有一个的原因。...比如有个索引是针对用户名字段创建的,索引记录上面方块中的字母是用户名,按照顺序形成链表。
♣ 题目部分 在Oracle中,位图连接索引是什么? ♣ 答案部分 位图连接索引(Bitmap Join Indexes)是建立在两个或更多表的连接之上的位图索引。...对于表列中的每个值,索引存储被索引表中的相应行的ROWID。相比之下,在标准位图索引中,索引是建立在一个表上的。在数据仓库环境中使用这种索引可以改进连接维度表和事实表的查询性能。...创建位图连接索引时,标准方法是连接索引中常用的维度表(Dimension)和事实表(Fact)。当用户在一次查询中结合查询事实表和维度表时,就不需要执行连接,因为在位图连接索引中已经有可用的连接结果。...位图连接索引有如下几点限制: ① 只可以索引维度表中的列。 ② 用于连接的列必须是维度表中的主键或唯一约束;如果是复合主键,那么必须使用连接中的每一列。...,而被索引的表是EMPLOYEES。
领取专属 10元无门槛券
手把手带您无忧上云