精华内容
下载资源
问答
  • date字段上建立了索引,但是sql语句中使用的where条件如下:WHERE to_char(start_time,’yyyy-mm-hh hh24:mi:ss’) > ‘2009-08-01 00:00:00′ AND to_char(start_time,’yyyy-mm-hh hh24:mi:ss’) < '2009-08...

    date字段上建立了索引,但是sql语句中使用的where条件如下:

    WHERE to_char(start_time,’yyyy-mm-hh hh24:mi:ss’) > ‘2009-08-01 00:00:00′ AND to_char(start_time,’yyyy-mm-hh hh24:mi:ss’) < '2009-08-31 23:59:59';

    因为使用了to_char函数,造成了索引没有使用。正确的写法如下:

    WHERE start_time > to_date(‘2009-08-01 00:00:00′ ,’yyyy-mm-hh hh24:mi:ss’) AND start_time < to_date('2009-08-31 23:59:59', ,'yyyy-mm-hh hh24:mi:ss');

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    以下内容引自itpub论坛:

    问题:

    环境:AIX 4.3.3,oracle9.2RAC,表mytab共有数据15万条左右上。

    在日期型字段(mydate)上建了一个索引(create index idx1 on mytab(mydate)),

    可是SQL(select mydate from mytab where to_char(mydate,’yyyymmdd’)=’20040310’)根本不使用这个索引。

    后来在该字段上建了一个函数索引:to_char(mydate,’yyyymmdd’)之后,该sql可以使用这个索引了,但是一旦加上order by mydate(select mydate from mytab where to_char(mydate,’yyyymmdd’)=’20040310′ order by mydate)之后,oracle又不使用索引了。真是非常困惑。

    把数据倒到Redhat AS3+oracle10上,现象也很费解。建索引:create index idx1 on mytab(to_char(mydate,’yyyymmdd’)),SQL(select mydate from mytab where to_char(mydate,’yyyymmdd’)=’20040310’)和SQL(select mydate from mytab where to_char(mydate,’yyyymmdd’)=’20040310′ order by mydate)都能使用该索引。

    那位大虾能解释上述现象啊?

    答复:

    我觉得你用to_char转换索引字段不可取

    where to_char(mydate,’yyyymmdd’)=’20040310’)

    可以转换

    where mydate >= to_date(‘20040310′,’yyyymmdd’)

    and mydate < to_date('20040311','yyyymmdd')

    原帖地址:http://www.itpub.net/thread-208701-1-1.html

    标签:索引

    展开全文
  • left join关联关系字段加索引2018-07-04left join是相当耗资源的操作,如果关联的字段没有索引的话,速度是很慢的,所以如果有left join的话,最好用索引字段取关联。创建索引会消耗大量资源,会导致数据库死锁,最好...

    给left join关联关系字段加索引

    2018-07-04

    left join是相当耗资源的操作,如果关联的字段没有索引的话,速度是很慢的,所以如果有left join的话,最好用索引字段取关联。

    创建索引会消耗大量资源,会导致数据库死锁,最好在非高峰时段创建。

    1、将left join关联关系字段都加为索引,

    2、prepare TS

    ym=`date +%Y%m`

    nm=`date -d '1month' +%Y%m`

    its_src=CONTACT_DATA_IDX_TS

    its_dst=CONTACT_DATA_IDX_TS_${ym}

    idx_ts1=/data3/oracle/contact_data_idx_ts_${nm}_1.dbf

    sqlplus abc/ta123456 << EOF

    set hea off

    --alter tablespace $its_src rename to $its_dst;

    CREATE TABLESPACE $its_src DATAFILE '$idx_ts1' SIZE 512M AUTOEXTEND ON NEXT 256M MAXSIZE UNLIMITED BLOCKSIZE 8k;

    3、创建索引并指定表空间。

    CREATE INDEX IDX_LOGIN_MESSAGE_CID on LOGIN_MESSAGE(COMPANY_ID);DROP INDEX index_name ON table_name

    CREATE INDEX IDX_contact_data_view_user_id on contact_data(view_user_id) TABLESPACE CONTACT_DATA_IDX_TS;--为索引指定表空间

    CREATE INDEX IDX_contact_data_NAME on contact_data(NAME) TABLESPACE CONTACT_DATA_IDX_TS;

    4、修改index的表空间

    alter index pk_t_user rebuild tablespace 111_inx;

    5、索引能提高检索数据的效率,会一定程度降低数据insert的效率;如果新增的数据是按照索引的顺序递增或递减,则无需定期重建索引;反之,则应该定期重建。

    相关日志

    展开全文
  • 在orderby 的字段主键或索引即可让oracle先按该字段排序,然后再rownum。 还有,有rownum的限制条件(如where子句里有rownum>2)在如where子句里,虽然where子句要早于rownum执行(rownum和order by都要晚于...

    SQL> select rownum,t1. * from t1 where rownum >0  order by name desc;

    ROWNUM         ID NAME

    ---------- ---------- --------------------

    2          2 yourlove

    7          6 xifenfei

    5          8 ting

    6          7 really

    4          4 game

    8          5 feng

    3          3 eygle

    1          1 about

    已选择8行。

    SQL> alter table t1 add constraint pkKey primary key(name);

    表已更改。

    SQL> select rownum,t1. * from t1 where rownum >0  order by name desc;

    ROWNUM         ID NAME

    ---------- ---------- --------------------

    1          2 yourlove

    2          6 xifenfei

    3          8 ting

    4          7 really

    5          4 game

    6          5 feng

    7          3 eygle

    8          1 about

    已选择8行。

    SQL> select rownum,t1. * from t1 where rownum <3  order by name desc;

    ROWNUM         ID NAME

    ---------- ---------- --------------------

    1          2 yourlove

    2          6 xifenfei

    SQL> select rownum,t1. * from t1 where id>2  and rownum <3  order by name desc;

    ROWNUM         ID NAME

    ---------- ---------- --------------------

    1          6 xifenfei

    2          8 ting

    SQL> select rownum,t1. * from t1 where id>2 and rownum > 1 and rownum <3  order

    by name desc;

    未选定行

    SQL>

    注释:

    rownum和order by哪个先执行,由优化器决定的。优化器根据具体情况决定他们俩的执行顺序:

    一般先前者再后者。在orderby 的字段上加主键或索引即可让oracle先按该字段排序,然后再rownum。

    还有,有rownum的限制条件(如where子句里有rownum>2)在如where子句里,虽然where子句要早于rownum执行(rownum和order by都要晚于select子句执行,而select子句又晚于where子句执行),但是在where子句里面的rownum限制条件还是没有随着where子句执行而执行。

    展开全文
  • Oracle修改字段类型后索引错误的解决方案起因:由于在查询中需要用到 UNION ALL 操作,而表中的存在 LONG 类型字段,操作无法完成,根据具体业务场景,将 LONG 类型字段修改为 CLOB 类型。修改后,UNION ALL 操作...

    Oracle修改字段类型后索引错误的解决方案

    起因:

    由于在查询中需要用到 UNION ALL 操作,而表中的存在 LONG 类型字段,操作无法完成,根据具体业务场景,将 LONG 类型字段修改为 CLOB 类型。修改后,UNION ALL 操作可行,但是子表的增删改操作出现了问题,提示为父表的 INDEX 不可用。

    这里顺便说一句:如果要从VARCHAR2类型修改为特殊类型CLOB,那么不能直接从VARCHAR2转换为CLOB,需要使用LONG类型,来做一个过渡(可以先修改为LONG类型,然后从LONG修改为CLOB)。

    解决方案:

    1.同事前不久也遇到了这个问题,他的解决方案是:备份旧的表,删除表,然后再导入数据,并且依然需要重建主键等。对没有直接操作权限的ORCALE服务器恐怕有难度。所以这里归根结底还是drop and re-create。

    2.重建索引。Oracle重建索引有多种方式,如 drop and re-create、rebuild、rebuild online等。这里采用的是第一种方式删除创建。需要的一些脚本如下(TB_SCENERY是父表【景点表】,TB_SCENERY_TICKETS是子表【景点门票表】):

    --查询主外键,表名一定要大写

    select constraint_name from user_constraints where table_name = 'TB_SCENERY';

    select constraint_name from user_constraints where table_name = 'TB_SCENERY_TICKETS';

    --删除主外键,注意大小写

    alter table TB_SCENERY drop constraint SCENERY_PK_ID;

    alter table TB_SCENERY_TICKETS drop constraint SCENERY_ID;

    --增加主键(增加主键时会自动建立关于主键的索引)

    alter table TB_SCENERY add constraint SCENERY_PK_ID primary key (ID) ;

    --增加外键

    alter table TB_SCENERY_TICKETS add constraint SCENERY_PK_ID foreign key (SCENERY_ID) references TB_SCENERY (ID);

    --查询表的相关索引

    select index_name,index_type,table_name from user_indexes where table_name='TB_SCENERY';

    --删除索引[强制]

    DROP INDEX SCENERY_PK_ID [FORCE];

    --查询哪些表没有建立索引

    SELECT table_name FROM User_tables t WHERE NOT EXISTS (SELECT table_name FROM User_constraints c WHERE constraint_type = 'P' AND t.table_name=c.table_name)

    这里的步骤是:

    1.查询子表的外键名称,删除对应的外键,以及外键对应的索引

    2.查询主表的主键名称,删除对应的主键,以及主键对应的索引

    3.建立主表主键(主键索引会自动建立),建立子表外键,建立外键索引

    3.drop and re-create 方式的有点是速度快,缺点是会影响原有的SQL查询,如果考虑这个影响那就可以采用rebuild的方式(IDX_TEST_C1这是索引名称):

    ALTER INDEX IDX_TEST_C1 REBUILD;

    其实开始是尝试的是rebuild的方式,但是失败了,无可奈何只能采用drop and re-create 方式。

    展开全文
  • 转:首先,在大多数情况下,复合索引比单字段索引好.以税务系统的SB_ZSXX(申报类_征收信息表)为例,该表为税务系统最大的交易表.如果分别按纳税人识别号,税务机关代码,月份3个字段查询,每个字段在该表中的可选性或约束...
  • 今天在开发过程中遇到了需要两个字段联合保证唯一性,所以查阅了一些资料和博客,梳理一下以便之后用到!!! 首先,你要搞明白什么是唯一索引和唯一约束,其次它们之间的区别是什么? 前提 二者的定义 唯一...
  • 比如我们要BASE_PASSENGER_STATION的geometry字段创建索引。具体语句如下。INSERTINTOuser_sdo_geom_metadata(TABLE_NAME,COLUMN_NAME,DIMINFO,SRID)VALUES('BASE_PASSENGER_STATION','GEOMETRY',MDSYS.SDO_DIM_...
  • 起因:由于在查询中需要用到 UNION ALL 操作,而表中的存在 LONG 类型字段,操作无法完成,根据具体业务场景,将 LONG 类型字段修改为 CLOB 类型。修改后,UNION ALL 操作可行,但是子表的增删改操作出现了问题,...
  • oracle数据库加索引

    千次阅读 2021-03-26 09:44:01
    CREATE INDEX IDEN_IDNUMBER–>索引名称 ON SIDENTITY–>表名 ( IDNUMBER–>字段名 );
  • lastwinner 发表于 2014-11-30 11:22 where中文字段Alike'%关键词%'这样的查询是铁定用不到索引的SQL> create table td(a varchar(10) primary key);表已创建。已用时间:00: 00: 00.08SQL> insert into td ...
  • Select *FROM dba_ind_columnsWhere index_owner='TEST73' AND table_name=upper('tx_log_t')可以查询数据库的表上面的索引字段。参考博文:Question: I added an index hint in my query,but the hint is being ...
  • 11我们知道索引列如果出现null值会导致索引失效。具体情况如下:表中数据如下: 可见storeid列有null值。...那该如何让该在字段有空值的情况下触发索引呢?有两种方法:1、建立函数索引 create index xxx on 表名(列...
  • 相关题目与解析当使用SQL语言中的“CREATEINDEX”语句米建立索引时,可以在该语句中使用短语【】来指定索引值按升当用SQL的CREATEINDEX语句建立索引时,可以在该语句中使用短语【】指定索引值按升序排序,使用短在...
  • LOBs,或Large Objects字段,是Oracle中用于处理存储非字符数据推荐的一种字段类型,例如mp3,video,图片,和long字符串数据。二进制大对象,或BLOBs,字符大对象,或CLOBs,能够存储TB的数据。LOB列有许多相关的属性,...
  • Oracle 大表创建索引

    2021-05-05 01:09:17
    有个2亿记录的表,发现需要添加一个联合索引,结果就采用普通的create index index_name on tablename (entp_id,sell_date),结果悲剧了,把所有的DML语句都阻塞了,导致系统不能正常使用,还好是晚上10点,用户不是...
  • 选择索引字段的原则:在WHERE子句中最频繁使用的字段联接语句中的联接字段选择高选择性的字段(如果很少的字段拥有相同值,即有很多独特值,则选择性很好)Oracle在UNIQUE和主键字段上自动建立索引在选择性很差的字段上建...
  • oracle 添加字段

    2021-05-08 06:57:55
    C&num; 安装和卸载 Windows Service特别注意: 安装Window Service 的时候,一定要用管理员打开命令提示符(cmd) 1. 创建Windows Service 服务项目 2. Service设计界面:右键-->选择安装 ......
  • Oracle_索引_plsql基础

    2021-05-02 03:45:38
    创建索引:create index 索引名 on 表名(列名)删除索引:drop index 索引名SQL语句优化的一些基本原则:要根据实际情况考虑是否加入索引在查询和使用统计函数时,不使用*,而是使用查询的字段或统计的字段。...
  • Oracle 分区表上的索引

    2021-05-02 07:35:23
    分区表上的索引分为:本地(局部)索引(local index) 和 全局索引(global index)1、本地索引(1)普通索引SQL > CREATE INDEX INDEX_NAME ON TABLE (COLUMN)local(partition part_idx_01 tablespace index_space01,...
  • ERROR at line 1: ORA-01408: such column list already indexed 因此Oracle在创建唯一约束时已经创建了索引.但如果我单独创建索引,它就会接受这些索引 create index table1_idx1 on table1(column1); create index...
  • 1)概念: Oracle中的索引是基于表或集群的数据对象. 它具有类似于表的独立段存储结构,并且需要在表空间中分配存储空间.2)功能: 可以提高查找表中数据的速度.1)B树索引(测试站点): 它是Oracle中使用最广泛的索引和...
  • Oracle 添加主键和索引

    千次阅读 2021-05-08 00:35:31
    数据的主键和索引一般情况下都是必须的,特别是表有大量数据的时候,索引和主键更是必不可少,这样可以提供数据的查询效率;一、创建表的同时创建主键约束(1)无命名create table student (studentid int primary key...
  • 1、索引是有序的。当一个空值进入索引时,无法确定其在索引中的位置。 2、空值与空值不相等。当检索一个空值时,由于空值与空值并不相等,所以,无法在索引中找到期望的空值索引。 以上讨论限于通常的B树索引类型,...
  • Oracle 降序索引

    2021-05-03 03:07:49
    降序索引 降序索引是8i里面新出现的一种索引,是B*Tree的另一个衍生物,它的变化就是列在索引中的储存方式从升序变成了降序,在某些场合下降序索引将会起作用。举个例子,我们来查询一张表并进行排序: SQL> ...
  • 【IT168 服务器学院】平台:SunOS 5.8 Generic_108528-23 sun4u sparc SUNW,Ultra-Enterprise数据库:8.1.5.0.0症状:响应缓慢,应用请求已经无法返回。...图1如果日志都处于active状态,那么显然DBWR的写已经无法跟上log ...
  • Oracle中组合索引的使用关键词:组合索引 前导列基于规则的优化器(RBO)基于成本的优化器(CBO)提示(hint)在Oracle中可以创建组合索引,即同时包含两个或两个以上列的索引。在组合索引的使用方面,Oracle有以下特点:1...
  • Oracle创建全文索引

    2021-05-01 06:43:10
    1、创建表空间,有必要将物理文件设置大一些2、创建基于这个表空间的用户3、创建需要建立全文索引的表4、用管理员帐户为使用这用户开发ctx_ddl权限grant execute on ctx_ddl to useer;5、创建适合的lexer(解析器)...
  • SQL> desc t_h_recieve;名称 是否为空? 类型----------------------------------------------------- -------- ------------------------------------ID ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 118,702
精华内容 47,480
关键字:

oracle给字段加索引