move lob会不会影响其他索引状态?

前几天在客户现场做升级,脚本中move lob字段了,客户继续执行操作的时候,喊索引失效了。经查看,是非lob字段的索引失效,当时没注意,直接rebuild了,半夜回去的路上,经理问我,move lob字段,为什么其他索引会失效?我当时。。。夜深人静时,最佳思考时。思考的结果就是:我发现很多东西我都知道,但究其根本,就有点模糊了。比如:索引,我知道是根据rowid快速找到一行,但是,索引存储的是一列的值(单列索引),会不会存储与其他列的关系呢?。。。。

后来决定通过实验验证,不知道所以然,至少得知道依然呀。怎么着,先知道一个再说先。

--建测试表,含主键
create table dxmy_lob(id number primary key,name blob,sex varchar2(10),location varchar2(100));
select * from dba_lobs d where d.table_name = 'DXMY_LOB';

--插入数据
INSERT INTO DXMY_LOB VALUES(2,to_blob('110111011'),'MAN','SOMEWARE');
COMMIT;

select * from dxmy_lob;

--创建普通索引
create index ind_dxmy on dxmy_lob(sex);

--move前查看索引状态
select d.owner,d.index_name,d.index_type,d.status,d.last_analyzed from dba_indexes d where d.table_name = 'DXMY_LOB';

OWNER	INDEX_NAME	INDEX_TYPE	STATUS	LAST_ANALYZED
LM	IND_DXMY	NORMAL	VALID	2015/12/17 4:29:51
LM	SYS_C0011400	NORMAL	VALID
LM	SYS_IL0000087754C00002$$	LOB	VALID	

--move走起
alter table lm_lob move lob(name) store as LM_LOB_SEG (tablespace users);

--move之后索引状态
select d.owner,d.index_name,d.index_type,d.status,d.last_analyzed from dba_indexes d where d.table_name = 'DXMY_LOB';

OWNER	INDEX_NAME	INDEX_TYPE	STATUS	LAST_ANALYZED
LM	IND_DXMY	NORMAL	VALID	2015/12/17 4:29:51
LM	SYS_C0011400	NORMAL	VALID
LM	SYS_IL0000087754C00002$$	LOB	VALID	

正常呀,莫非。。。

哎,我灵机一动,以为是复合索引,结果不能建。。

那最大的可能就是客户做了什么操作,是索引失效了。

时间: 2024-10-13 23:23:33

move lob会不会影响其他索引状态?的相关文章

Atitit.分区对索引的影响 分区索引和全局索引 attilax总结

Atitit.分区对索引的影响 分区索引和全局索引 attilax总结 1. 分区的好处1 2. 分区键:2 3. 分区的建议:2 4. 分区索引和全局索引:2 5. 全局索引就是在全表上创建索引, 3 6. 总结4 7. refer4 1. 分区的好处 在一个表的数据超过过2000万条或占用2G空间时,建议建立分区表 分区使得数据管理操作如数据装载.索引建立和重建.备份和恢复等在分区级别上完成,这比在表级完成操作要明显的节省时间: 分区可以提高性能,在很多情况下,查询可以通过扫描某个分区来完成

Oracle索引状态查询&索引重建

--检查损坏索引 SELECT status, COUNT(*) FROM dba_indexes GROUP BY status UNION SELECT status, COUNT(*) FROM dba_ind_partitions GROUP BY status UNION SELECT status, COUNT(*) FROM dba_ind_subpartitions GROUP BY status --重建索引 alter index pk_kc03 rebuild nologg

oracle lob move tablespace

oracle 大对象移动表空间 ALTER INDEX GHSJ_JCSJ.SYS_IL0000129600C00012$$ REBUILD  TABLESPACE GHSJ_JCSJ ORA-02327: cannot create index on expression with datatype LOB 将lob对象对应的列移动到相应的表空间,会自动创建之前的索引 ALTER TABLE  ghsj_jcsj.B_REPORT_HIS MOVE LOB (FILE_PATH) STORE

SQL Server创建复合索引时,复合索引列顺序对查询的性能影响

说说复合索引 写索引的博客太多了,一直不想动手写,有一下两个原因:一是觉得有炒剩饭的嫌疑,有兄弟曾说:索引吗,只要在查询条件上建索引就行了,真的可以这么暴力吗?二来觉得,索引是个非常大的话题,很难概括出所有的情况,你不整出点新意来,倒是有抄袭照搬的嫌疑 既然写了,就写一点稍微不一样的东西出来,好了,废话打住,开搞 /* 20160814备注:今天发现一个类似的文章:http://www.cnblogs.com/fly_zj/archive/2012/08/11/2633629.html : 可以

主键及主键索引的关系及相互影响

主键的定义:列或多列的集合,用于唯一的标识表中的一行.一个表上只允许有一个主键. 我们在数据库中指定主键时,是通过主键约束来定义的.而创建主键约束时,又是需要有相应的索引来配合实现的.所以,本文的目的是总结创建主键约束时,采用不同的方法创建索引后,主键与该索引之间的关系及相互影响. 为配合本文的描述和测试,首先创建如下测试表: create table test (id number,c1 varchar2(8)); 一. 首先,我们来看最常用的创建主键约束及索引的方法: alter table

LOB类型的学习、总结

LOB相关的概念 LOB类型: 将信息文件(十进制.二进制).图像甚至音频信息采用数据库作为保存载体时,就需要使用lob类型数据. 有两种Lob,Internal Lob和External Lob.Internal Lob是指Lob数据存储在Oracle数据文件里,External Lob是指Lob数据存储在数据库外部的操作系统中. CLOB:????????存储大量.单字节.字符数据,存储在内部表空间,用于存储字符串类型的Lob,如文本和XML文件等,字符串已数据库字符集编码. NLOB:??

【三思笔记】 全面学习Oracle分区表及分区索引

[三思笔记]全面学习Oracle分区表及分区索引 2008-04-15 关于分区表和分区索引(About PartitionedTables and Indexes) 对于 10gR2 而言,基本上可以分成几类: v  Range(范围)分区 v  Hash(哈希)分区 v  List(列表)分区 v  以及组合分区:Range-Hash,Range-List. 对于表而言(常规意义上的堆组织表),上述分区形式都可以应用(甚至可以对某个分区指定 compress 属性),只不过分区依赖列不能是

SQL优化的四个方面,缓存,表结构,索引,SQL语句

一,缓存 数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所以,要优化数据库,首先第一步需要优化的就是 IO,尽可能将磁盘IO转化为内存IO. query_cache_size/query_cache_type (global) Query cache 作用于整个 MySQL Instance,主要用来缓存 MySQL 中的 ResultSet,也就是一条S

索引重整原理

碎片重整是为尽量保持索引联机可用的同时从索引的叶级别消除逻辑碎片而设计的.当对索引碎片整理的时候,SQL Server 会在索引的B-树结构上获取一个意向共享锁.只有在分页被实际操作时才在这些个别分页上占有排他分页锁. 2005 重整通过 alter index 命令发起的.移除碎片命令的一般格式如下: alter index { index_name | all } on <object> reorganize [ partition = partition_number ] [ with