精华内容
下载资源
问答
  • wyxDBMS是一个用Java实现关系型数据库 实现功能 1,用Java语言建立数据库表。 (1)数据文件和字典文件存储结构和访问方法为按行访问,数据为字符型直接阅读。 (2)属性个数任意,属性类型包括整数int,...
  • 1 索引简介索引是与表相关的一个可选结构用以提高 SQL 语句执行性能减少磁盘I/O使用 CREATE INDEX 语句创建索引在逻辑上和物理上都独立于表数据 Oracle 自动维护索引索引有各种类型,除了标准索引外,还有一些...

    1 索引简介

    • 索引是与表相关的一个可选结构
    • 用以提高 SQL 语句执行的性能
    • 减少磁盘I/O
    • 使用 CREATE INDEX 语句创建索引
    • 在逻辑上和物理上都独立于表的数据 Oracle 自动维护索引

    索引有各种类型,除了标准索引外,还有一些特殊类型的索引:

    e3ac435f8a5d64eaf3ed007d2c5895d3.png

    2 索引创建修改删除

    创建标准索引

     CREATE INDEX item_index ON itemfile (itemcode) TABLESPACE index_tbs;

    重建索引

    SQL> ALTER INDEX item_index REBUILD; 

    删除索引

    SQL> DROP INDEX item_index;

    3 唯一索引

    唯一索引确保在定义索引的列中没有重复值

    Oracle 自动在表的主键列上创建唯一索引

    使用CREATE UNIQUE INDEX语句创建唯一索引

     SQL> CREATE UNIQUE INDEX item_index ON itemfile (itemcode);

    4 组合索引

    组合索引是在表的多个列上创建的索引

    索引中列的顺序是任意的

    如果 SQL 语句的 WHERE 子句中引用了组合索引的所有列或大多数列,则可以提高检索速度

    SQL> CREATE INDEX comp_index ON itemfile(p_category, itemrate);

    5 反向键索引

    反向键索引反转索引列键值的每个字节

    通常建立在值是连续增长的列上,使数据均匀地分布在整个索引上

    创建索引时使用REVERSE关键字

    1001 1001

    1002 2001

    1003 3001

    1004 4001

    1005 5001

    SQL> CREATE INDEX rev_index  ON itemfile (itemcode) REVERSE; SQL> ALTER INDEX rev_index REBUID NOREVERSE;

    6 位图索引

    位图索引适合创建在低基数列上

    位图索引不直接存储ROWID,而是存储字节位到ROWID的映射

    减少响应时间

    节省空间占用

    d4478856eb6d7fd3ad14f5c2420a84de.png

    SQL> CREATE BITMAP INDEX bit_index

    ON order_master (orderno);

    展开全文
  • 当建立一个索引时,必须指定用于跟踪表名以及一个或多个表列。一旦建立了索引,在用户表中建立、更改和删除数据库时, Oracle就自动地维护索引。创建索引时,下列准则将帮助用户做出决定:1) 索引应该在SQL语句的...

    索引是由Oracle维护的可选结构,为数据提供快速的访问。准确地判断在什么地方需要使用索引是困难的,使用索引有利于调节检索速度。 当建立一个索引时,必须指定用于跟踪的表名以及一个或多个表列。一旦建立了索引,在用户表中建立、更改和删除数据库时, Oracle就自动地维护索引。创建索引时,下列准则将帮助用户做出决定:

    1) 索引应该在SQL语句的"where"或"and"部分涉及的表列(也称谓词)被建立。假如personnel表的"firstname"表列作为查询结果显示,而不是作为谓词部分,则不论其值是什么,该表列不会被索引。

    2) 用户应该索引具有一定范围的表列,索引时有一个大致的原则:如果表中列的值占该表中行的2 0 %以内,这个表列就可以作为候选索引表列。假设一个表有36 000行且表中一个表列的值平均分布(大约每12000行),那么该表列不适合于一个索引。然而,如果同一个表中的其他表列中列值的行在1 0 0 0~1 5 0 0之间(占3 %~4 % ),则该表列可用作索引。

    3)如果在S Q L语句谓词中多个表列被一起连续引用,则应该考虑将这些表列一起放在一个索引内, O r a c l e将维护单个表列的索引(建立在单一表列上)或复合索引(建立在多个表列上)。复合索引称并置索引。

    一、主关键字的约束

    关系数据库理论指出,在表中能唯一标识表的每个数据行的一个或多个表列是对象的主关键字。由于数据字典中定义的主关键字能确保表中数据行之间的唯一性,因此,在O r a c l e 8 i数据库中建立表索引关键字有助于应用调节。另外,这也减轻了开发者为了实现唯一性检查,而需要各自编程的要求。

    提示使用主关键字索引条目比不使用主关键字索引检索得快。

    假设表p e r s o n把它的i d表列作为主关键字,用下列代码设置约束:

    alter table person add constraint person_pk primary key (id) using index storage (initial 1m next 1m pctincrease 0) tablespace prd_indexes ;

    处理下列S Q L语句时:select last_name ,first_name ,salary from person where id = 289 ;

    在查找一个已确定的“ i d”表列值时, O r a c l e将直接找到p e r s o n _ p k。如果其未找到正确的索引条目,O r a c l e知道该行不存在。主关键字索引具有下列两个独特之处:

    1.1因为索引是唯一的, 所以O r a c l e知道只有一个条目具有设定值。如果查找到了所期望的条目,则立即终止查找。

    1.2一旦遇到一个大于设定值的条目,索引的顺序搜索可被终止;

    二、ORDER BY中用索引

    ORDER BY 子句只在两种严格的条件下使用索引.

    ORDER BY中所有的列必须包含在相同的索引中并保持在索引中的排列顺序.

    ORDER BY中所有的列必须定义为非空.

    WHERE子句使用的索引和ORDER BY子句中所使用的索引不能并列.

    例如:

    表DEPT包含以下列:

    dept_code pk not null

    dept_desc not null

    dept_type null

    非唯一性的索引(dept_type) ,

    低效: (索引不被使用)

    select dept_code from dept order by dept_type

    explain plan: sort order by table access full

    高效: (使用索引)

    select dept_code from dept where dept_type > 0

    explain plan:

    table access by rowid on emp

    index range scan on dept_idx

    三、避免改变索引列的类型

    当比较不同数据类型的数据时, oracle自动对列进行简单的类型转换.

    假设 empno是一个数值类型的索引列:

    select …from emp where empno = '123'

    实际上,经过ORACLE类型转换, 语句转化为: select … from emp where empno = to_number('123')

    幸运的是,类型转换没有发生在索引列上,索引的用途没有被改变.

    现在,假设emp_type是一个字符类型的索引列: select … from emp where emp_type = 123

    这个语句被oracle转换为: select … from emp where to_number(emp_type)=123

    因为内部发生的类型转换, 这个索引将不会被用到! 为了避免oracle对你的sql进行隐式的类型转换, 最好把类型转换用显式表现出来. 注意当字符和数值比较时, oracle会优先转换数值类型到字符类型.

    四、需要当心的where子句

    某些select 语句中的where子句不使用索引. 这里有一些例子:

    1、IS NULL 与 IS NOT NULL

    不能用null作索引,任何包含null值的列都将不会被包含在索引中。即使索引有多列这样的情况下,只要这些列中有一列含有null,该列就会从索引中排除。也就是说如果某列存在空值,即使对该列建索引也不会提高性能。

    任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的。

    2、'!=' 将不使用索引. 记住, 索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表中

    不使用索引: select * from employee where salary<>3000;

    使用索引: select account_name from transaction where amount >0;

    使用索引: select * from employee where salary<3000 or salary>3000;

    3、联接列,'||'是字符连接函数. 就象其他函数那样, 停用了索引

    不使用索引: select account_name,amount from transaction where account_name||account_type='AMEXA';

    使用索引: select account_name,amount from transaction where account_name = 'AMEX' and account_type=' A';

    4、'+'是数学函数. 就象其他数学函数那样, 停用了索引

    不使用索引: select account_name, amount from transaction where amount + 3000 >5000;

    使用索引: select account_name, amount from transaction where amount > 2000 ;

    5、相同的索引列不能互相比较,这将会启用全表扫描

    不使用索引: select account_name, amount from transaction where account_name = nvl(:acc_name,account_name);

    使用索引: select account_name, amount from transaction where account_name like nvl(:acc_name,'%');

    6、带通配符(%)的like语句

    不使用索引: select * from employee where last_name like '%cliton%';

    使用索引: select * from employee where last_name like 'c%'

    7、IN和EXISTS

    不使用索引: ... where column in(select * from ... where ...);

    使用索引: ... where exists (select 'X' from ...where ...);

    同时应尽可能使用NOT EXISTS来代替NOT IN,尽管二者都使用了NOT(不能使用索引而降低速度),NOT EXISTS要比NOT IN查询效率更高。

    如果一定要对使用函数的列启用索引:

    1、oracle新的功能: 基于函数的索引(function-based index) 也许是一个较好的方案:

    create index emp_i on emp (upper(ename)); /*建立基于函数的索引*/

    select * from emp where upper(ename) = 'BLACKSNAIL'; /*将使用索引*/

    2、MS SQL Server显示申明指定索引:

    SELECT * FROM PersonMember (INDEX = IX_Title) WHERE processid IN ('男','女')

    五、怎样监控无用的索引

    Oracle 9i以上,可以监控索引的使用情况,如果一段时间内没有使用的索引,一般就是无用的索引

    语法为:

    开始监控:alter index index_name monitoring usage;

    检查使用状态:select * from v$object_usage;

    停止监控:alter index index_name nomonitoring usage;

    当然,如果想监控整个用户下的索引,可以采用如下的脚本:

    set heading off

    set echo off

    set feedback off

    set pages 10000

    spool start_index_monitor.sql

    SELECT 'alter index '||owner||'.'||index_name||' monitoring usage;' FROM dba_indexes WHERE owner = USER;

    spool off

    set heading on

    set echo on

    set feedback on

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

    set heading off

    set echo off

    set feedback off

    set pages 10000

    spool stop_index_monitor.sql

    SELECT 'alter index '||owner||'.'||index_name||' nomonitoring usage;' FROM dba_indexes WHERE owner = USER;

    spool off

    set heading on

    set echo on

    set feedback on

    展开全文
  • 索引的使用

    2005-08-10 11:35:00
    当建立一个索引时,必须指定用于跟踪表名以及一个或多个表列。一旦建立了索引,在用户表中建立、更改和删除数据库时, Oracle就自动地维护索引。创建索引时,下列准则将帮助用户做出决定:1) 索引应该在SQL语句的...

    索引是由Oracle维护的可选结构,为数据提供快速的访问。准确地判断在什么地方需要使用索引是困难的。使用索引有利于调节检索速度。当建立一个索引时,必须指定用于跟踪的表名以及一个或多个表列。一旦建立了索引,在用户表中建立、更改和删除数据库时, Oracle就自动地维护索引。创建索引时,下列准则将帮助用户做出决定:
    1) 索引应该在SQL语句的"where"或"and"部分涉及的表列(也称谓词)被建立。假如
    personnel表的"firstname"表列作为查询结果显示,而不是作为谓词部分,则不论其值是什么,该表列不会被索引。
    2)用户应该索引具有一定范围的表列,索引时有一个大致的原则:如果表中列的值占该表中行的20%以内,这个表列就可以作为候选索引表列。假设一个表有36 000行且表中一个表列的值平均分布(大约每12000行),那么该表列不适合于一个索引。然而,如果同一个表中的其他表列中列值的行在1000~1500之间(占3%~4%),则该表列可用作索引。
    3)如果在SQL语句谓词中多个表列被一起连续引用,则应该考虑将这些表列一起放在一个索引内,Oracle将维护单个表列的索引(建立在单一表列上)或复合索引(建立在多个表列上)。复合索引称并置索引。

    1 主关键字的约束
    关系数据库理论指出,在表中能唯一标识表的每个数据行的一个或多个表列是对象的主关键字。由于数据字典中定义的主关键字能确保表中数据行之间的唯一性,因此,在O r a c l e 8 i数据库中建立表索引关键字有助于应用调节。另外,这也减轻了开发者为了实现唯一性检查,而需要各自编程的要求。提示使用主关键字索引条目比不使用主关键字索引检索得快。
    假设表p e r s o n把它的i d表列作为主关键字,用下列代码设置约束:
    alter table person add constraint person_pk primary key (id) using index storage (initial 1m next 1m pctincrease 0) tablespace prd_indexes ;
    处理下列SQL语句时:
    select last_name ,first_name ,salary from person where id = 289 ;
    在查找一个已确定的“id”表列值时,Oracle将直接找到person_pk。如果其未找到正确的索引条目,Oracle知道该行不存在。主关键字索引具有下列两个独特之处:
    1.1因为索引是唯一的,所以Oracle知道只有一个条目具有设定值。如果查找到了所期望的条目,则立即终止查找。
    1.2一旦遇到一个大于设定值的条目,索引的顺序搜索可被终止;
    2 ORDER BY中用索引
    ORDER BY 子句只在两种严格的条件下使用索引.
    ORDER BY 中所有的列必须包含在相同的索引中并保持在索引中的排列顺序.
    ORDER BY 中所有的列必须定义为非空.
    WHERE 子句使用的索引和ORDER BY子句中所使用的索引不能并列.

    例如:
    表DEPT包含以下列:
    DEPT_CODE PK
    NOT NULL
    DEPT_DESC NOT NULL
    DEPT_TYPE NULL
    非唯一性的索引(DEPT_TYPE)

    低效: (索引不被使用)
    SELECT DEPT_CODE
    FROM DEPT
    ORDER BY DEPT_TYPE
    EXPLAIN PLAN:
    SORT ORDER BY
    TABLE ACCESS FULL

    高效: (使用索引)
    SELECT DEPT_CODE
    FROM DEPT
    WHERE DEPT_TYPE > 0
    EXPLAIN PLAN:
    TABLE ACCESS BY ROWID ON EMP
    INDEX RANGE SCAN ON DEPT_IDX

    3 避免改变索引列的类型.
    当比较不同数据类型的数据时, ORACLE自动对列进行简单的类型转换.
    假设 EMPNO是一个数值类型的索引列.
    SELECT …
    FROM EMP
    WHERE EMPNO = ‘123'
    实际上,经过ORACLE类型转换, 语句转化为:
    SELECT …
    FROM EMP
    WHERE EMPNO = TO_NUMBER(‘123')
    幸运的是,类型转换没有发生在索引列上,索引的用途没有被改变.
    现在,假设EMP_TYPE是一个字符类型的索引列.
    SELECT …
    FROM EMP
    WHERE EMP_TYPE = 123
    这个语句被ORACLE转换为:
    SELECT…
    FROM EMP
    WHERE TO_NUMBER(EMP_TYPE)=123
    因为内部发生的类型转换, 这个索引将不会被用到!
    为了避免ORACLE对你的SQL进行隐式的类型转换, 最好把类型转换用显式表现出来. 注意当字符和数值比较时, ORACLE会优先转换数值类型到字符类型.

    4 需要当心的WHERE子句
    某些SELECT 语句中的WHERE子句不使用索引. 这里有一些例子.
    在下面的例子里, ‘!=' 将不使用索引. 记住, 索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表中.
    不使用索引:
    SELECT ACCOUNT_NAME
    FROM TRANSACTION
    WHERE AMOUNT !=0;

    使用索引:
    SELECT ACCOUNT_NAME
    FROM TRANSACTION
    WHERE AMOUNT >0;
    下面的例子中, ‘||'是字符连接函数. 就象其他函数那样, 停用了索引.

    不使用索引:
    SELECT ACCOUNT_NAME,AMOUNT
    FROM TRANSACTION
    WHERE ACCOUNT_NAME||ACCOUNT_TYPE='AMEXA';

    使用索引:
    SELECT ACCOUNT_NAME,AMOUNT
    FROM TRANSACTION
    WHERE ACCOUNT_NAME = ‘AMEX'
    AND ACCOUNT_TYPE=' A';

    下面的例子中, ‘+'是数学函数. 就象其他数学函数那样, 停用了索引.

    不使用索引:
    SELECT ACCOUNT_NAME, AMOUNT
    FROM TRANSACTION
    WHERE AMOUNT + 3000 >5000;

    使用索引:
    SELECT ACCOUNT_NAME, AMOUNT
    FROM TRANSACTION
    WHERE AMOUNT > 2000 ;

    下面的例子中,相同的索引列不能互相比较,这将会启用全表扫描.

    不使用索引:
    SELECT ACCOUNT_NAME, AMOUNT
    FROM TRANSACTION
    WHERE ACCOUNT_NAME = NVL(:ACC_NAME,ACCOUNT_NAME);

    使用索引:
    SELECT ACCOUNT_NAME, AMOUNT
    FROM TRANSACTION
    WHERE ACCOUNT_NAME LIKE NVL(:ACC_NAME,'%');
    如果一定要对使用函数的列启用索引, ORACLE新的功能: 基于函数的索引(Function-Based Index) 也许是一个较好的方案.
    CREATE INDEX EMP_I ON EMP (UPPER(ename)); /*建立基于函数的索引*/
    SELECT * FROM emp WHERE UPPER(ename) = ‘BLACKSNAIL';  /*将使用索引*/
    5 怎样监控无用的索引
    Oracle 9i以上,可以监控索引的使用情况,如果一段时间内没有使用的索引,一般就是无用的索引
    语法为:
    开始监控:alter index index_name monitoring usage;
    检查使用状态:select * from v$object_usage;
    停止监控:alter index index_name nomonitoring usage;
    当然,如果想监控整个用户下的索引,可以采用如下的脚本:
    set heading off
    set echo off
    set feedback off
    set pages 10000
    spool start_index_monitor.sql
    SELECT 'alter index '||owner||'.'||index_name||' monitoring usage;'
    FROM dba_indexes
    WHERE owner = USER;
    spool off
    set heading on
    set echo on
    set feedback on
    ------------------------------------------------
    set heading off
    set echo off
    set feedback off
    set pages 10000
    spool stop_index_monitor.sql
    SELECT 'alter index '||owner||'.'||index_name||' nomonitoring usage;'
    FROM dba_indexes
    WHERE owner = USER;
    spool off
    set heading on
    set echo on
    set feedback on

    展开全文
  • 当建立一个索引时,必须指定用于跟踪表名以及一个或多个表列。一旦建立了索引,在用户表中建立、更改和删除数据库时, Oracle就自动地维护索引。创建索引时,下列准则将帮助用户做出决定: 1) 索引应该在SQL语句...

    索引是由Oracle维护的可选结构,为数据提供快速的访问。准确地判断在什么地方需要使用索引是困难的,使用索引有利于调节检索速度。 当建立一个索引时,必须指定用于跟踪的表名以及一个或多个表列。一旦建立了索引,在用户表中建立、更改和删除数据库时, Oracle就自动地维护索引。创建索引时,下列准则将帮助用户做出决定: 
           1) 索引应该在SQL语句的"where"或"and"部分涉及的表列(也称谓词)被建立。假如personnel表的"firstname"表列作为查询结果显示,而不是作为谓词部分,则不论其值是什么,该表列不会被索引。 
           2) 用户应该索引具有一定范围的表列,索引时有一个大致的原则:如果表中列的值占该表中行的2 0 %以内,这个表列就可以作为候选索引表列。假设一个表有36 000行且表中一个表列的值平均分布(大约每12000行),那么该表列不适合于一个索引。然而,如果同一个表中的其他表列中列值的行在1 0 0 0~1 5 0 0之间(占3 %~4 % ),则该表列可用作索引。 

           3)如果在S Q L语句谓词中多个表列被一起连续引用,则应该考虑将这些表列一起放在一个索引内, O r a c l e将维护单个表列的索引(建立在单一表列上)或复合索引(建立在多个表列上)。复合索引称并置索引。 

    一、主关键字的约束 

      关系数据库理论指出,在表中能唯一标识表的每个数据行的一个或多个表列是对象的主关键字。由于数据字典中定义的主关键字能确保表中数据行之间的唯一性,因此,在O r a c l e 8 i数据库中建立表索引关键字有助于应用调节。另外,这也减轻了开发者为了实现唯一性检查,而需要各自编程的要求。 

      提示使用主关键字索引条目比不使用主关键字索引检索得快。 

      假设表p e r s o n把它的i d表列作为主关键字,用下列代码设置约束: 
    alter table person add constraint person_pk primary key (id) using index storage (initial 1m next 1m pctincrease 0) tablespace prd_indexes ; 

      处理下列S Q L语句时:select last_name ,first_name ,salary from person where id = 289 ; 

      在查找一个已确定的“ i d”表列值时, O r a c l e将直接找到p e r s o n _ p k。如果其未找到正确的索引条目,O r a c l e知道该行不存在。主关键字索引具有下列两个独特之处: 

     1.1因为索引是唯一的, 所以O r a c l e知道只有一个条目具有设定值。如果查找到了所期望的条目,则立即终止查找。 

     1.2一旦遇到一个大于设定值的条目,索引的顺序搜索可被终止; 

    二、ORDER BY中用索引 

      ORDER BY 子句只在两种严格的条件下使用索引. 
      ORDER BY中所有的列必须包含在相同的索引中并保持在索引中的排列顺序. 
      ORDER BY中所有的列必须定义为非空. 
      WHERE子句使用的索引和ORDER BY子句中所使用的索引不能并列. 

    例如: 
      表DEPT包含以下列: 
    dept_code pk not null 
    dept_desc not null 
    dept_type null 


    非唯一性的索引(dept_type) , 
      低效: (索引不被使用) 
    select dept_code from dept order by dept_type 
    explain plan: sort order by table access full 

      高效: (使用索引) 
    select dept_code from dept where dept_type > 0 
    explain plan: 
    table access by rowid on emp 
    index range scan on dept_idx 

    三、避免改变索引列的类型 

      当比较不同数据类型的数据时, oracle自动对列进行简单的类型转换. 

    假设 empno是一个数值类型的索引列: 
      select …from emp where empno = '123' 
      实际上,经过ORACLE类型转换, 语句转化为: select … from emp where empno = to_number('123') 

      幸运的是,类型转换没有发生在索引列上,索引的用途没有被改变. 

      现在,假设emp_type是一个字符类型的索引列: select … from emp where emp_type = 123 
      这个语句被oracle转换为: select … from emp where to_number(emp_type)=123 

      因为内部发生的类型转换, 这个索引将不会被用到! 为了避免oracle对你的sql进行隐式的类型转换, 最好把类型转换用显式表现出来. 注意当字符和数值比较时, oracle会优先转换数值类型到字符类型. 

    四、需要当心的where子句 

    某些select 语句中的where子句不使用索引. 这里有一些例子: 

    1、IS NULL 与 IS NOT NULL 
      不能用null作索引,任何包含null值的列都将不会被包含在索引中。即使索引有多列这样的情况下,只要这些列中有一列含有null,该列就会从索引中排除。也就是说如果某列存在空值,即使对该列建索引也不会提高性能。 
      任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的。 

    2、'!=' 将不使用索引. 记住, 索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表中 

    不使用索引: select * from employee where salary<>3000; 
    使用索引: select account_name from transaction where amount >0; 
    使用索引: select * from employee where salary<3000 or salary>3000; 

    3、联接列,'||'是字符连接函数. 就象其他函数那样, 停用了索引 

    不使用索引: select account_name,amount from transaction where account_name||account_type='AMEXA'; 
    使用索引: select account_name,amount from transaction where account_name = 'AMEX' and account_type=' A'; 

    4、'+'是数学函数. 就象其他数学函数那样, 停用了索引 

    不使用索引: select account_name, amount from transaction where amount + 3000 >5000; 
    使用索引: select account_name, amount from transaction where amount > 2000 ; 

    5、相同的索引列不能互相比较,这将会启用全表扫描 

    不使用索引: select account_name, amount from transaction where account_name = nvl(:acc_name,account_name); 
    使用索引: select account_name, amount from transaction where account_name like nvl(:acc_name,'%'); 

    6、带通配符(%)的like语句 

    不使用索引: select * from employee where last_name like '%cliton%'; 
    使用索引: select * from employee where last_name like 'c%' 

    7、IN和EXISTS 

    不使用索引: ... where column in(select * from ... where ...); 
    使用索引: ... where exists (select 'X' from ...where ...); 
    同时应尽可能使用NOT EXISTS来代替NOT IN,尽管二者都使用了NOT(不能使用索引而降低速度),NOT EXISTS要比NOT IN查询效率更高。 

    如果一定要对使用函数的列启用索引: 
    1、oracle新的功能: 基于函数的索引(function-based index) 也许是一个较好的方案: 
    create index emp_i on emp (upper(ename)); /*建立基于函数的索引*/ 
    select * from emp where upper(ename) = 'BLACKSNAIL'; /*将使用索引*/ 
    2、MS SQL Server显示申明指定索引: 
    SELECT * FROM PersonMember (INDEX = IX_Title) WHERE processid IN ('男','女') 

    五、怎样监控无用的索引 

      Oracle 9i以上,可以监控索引的使用情况,如果一段时间内没有使用的索引,一般就是无用的索引 

      语法为: 
      开始监控:alter index index_name monitoring usage; 
      检查使用状态:select * from v$object_usage; 
      停止监控:alter index index_name nomonitoring usage; 
      当然,如果想监控整个用户下的索引,可以采用如下的脚本: 

    set heading off 
    set echo off 
    set feedback off 
    set pages 10000 
    spool start_index_monitor.sql 

    SELECT 'alter index '||owner||'.'||index_name||' monitoring usage;' FROM dba_indexes WHERE owner = USER; 

    spool off 
    set heading on 
    set echo on 
    set feedback on 
    ------------------------------------------------------------------------------------------------------------------------------ 
    set heading off 
    set echo off 
    set feedback off 
    set pages 10000 
    spool stop_index_monitor.sql 

    SELECT 'alter index '||owner||'.'||index_name||' nomonitoring usage;' FROM dba_indexes WHERE owner = USER; 

    spool off 
    set heading on 
    set echo on 
    set feedback on 

    原文:http://czllfy.iteye.com/blog/510282

    转载于:https://www.cnblogs.com/azhqiang/p/3747998.html

    展开全文
  • 在Oracle中索引的使用

    万次阅读 2016-04-22 23:44:53
    当建立一个索引时,必须指定用于跟踪表名以及一个或多个表列。一旦建立了索引,在用户表中建立、更改和删除数据库时, Oracle就自动地维护索引。创建索引时,下列准则将帮助用户做出决定:  1) 索引应该在SQL...
  • 当建立一个索引时,必须指定用于跟踪表名以及一个或多个表列。一旦建立了索引,在用户表中建立、更改和删除数据库时, Oracle就自动地维护索引。创建索引时,下列准则将帮助用户做出决定:  1) 索引应该在SQL...
  • 当建立一个索引时,必须指定用于跟踪表名以及一个或多个表列。一旦建立了索引,在用户表中建立、更改和删除数据库时, Oracle就自动地维护索引。创建索引时,下列准则将帮助用户做出决定:    1) 索引应该在...
  • 不同存储引擎定义不同最大索引数量和最大索引长度,每种存储引擎对每个表至少支持16个索引,总索引长度至少为256字节。 MyISAM和InnoDB存储引擎表默认都是创建BTREE索引,而MEMEORY存储引擎使用HASH索引,但...
  • 当建立一个索引时,必须指定用于跟踪表名以及一个或多个表列。一旦建立了索引,在用户表中建立、更改和删除数据库时, Oracle就自动地维护索引。 创建索引时,下列准则将帮助用户做出决定: 1) 索引应该在SQL...
  • mysql中可使用“CREATE INDEX”语句来添加索引;...mysql索引创建创建索引是指在某个表一列或多列上建立一个索引,可以提高对表访问速度。创建索引对 MySQL 数据库高效运行来说是很重要。基本语法My...
  • mysql中可使用“CREATE INDEX”语句来添加索引;...(推荐教程:mysql视频教程)mysql索引创建创建索引是指在某个表一列或多列上建立一个索引,可以提高对表访问速度。创建索引对 MySQL 数据库高效...
  • MYSQL索引,事物与存储引擎一,索引介绍1,索引概念(1)数据库索引(2)索引作用2,索引分类索引分为五类:3, 索引创建方法1,普通索引2,唯一索引 (一个字段建立多个索引)3,主键索引4,组合索引(单列...
  • sql经典语句一部分

    2011-07-31 11:16:50
    注:索引是不更改,想更改必须删除重新建。 9、说明:创建视图:create view viewname as select statement 删除视图:drop view viewname 10、说明:几简单基本sql语句 选择:select * from table1 ...
  • 107常用javascript语句

    2011-03-06 23:59:07
    数组中一个元素(从索引 0 开始到最高索引结束)均会转换为一个连接字 符串,并以逗号分隔。若要指定自定义分隔符,请使用 Array.join() 方法。 可用性:ActionScript 1.0;Flash Player 5 返回 String - ...
  •  注:索引是不更改,想更改必须删除重新建。  9、说明:  创建视图:create view viewname as select statement  删除视图:drop view viewname 10、说明:几简单基本sql语句  选择:select * from ...
  • Oracle索引

    2013-12-27 11:17:42
    当建立一个索引时,必须指定用于跟踪表名以及一个或多个表列。一旦建立了索引,在用户表中建立、更改和删除数据库时, Oracle就自动地维护索引。创建索引时,下列准则将帮助用户做出决定:  1) 索引应该在SQL...
  • SQL Server 2008中SQL应用系列--目录索引 SQL Server 2008提供了一个增强SQL命令Merge,用法参看MSDN:...例如,根据在另一个表中找到差异在一个表中插入、更新或删除行,...
  • 对于每一个简化后小表,我们称为一个单个分区  对于分区访问,我们不需要使用特殊SQL查询语句或特定DML语句,而且可以单独操作单个分区,而不是整个表。同时可以将不同分区数据放置到不同表空
  • Oracle索引简单介绍

    2019-03-10 18:38:16
    当建立一个索引时,必须指定用于跟踪表名以及一个或多个表列。一旦建立了索引,在用户表中建立、更改和删除数据库时, Oracle就自动地维护索引。 创建索引时有以下几点准则可以借鉴: 1索引应该在SQL语句的"...
  • 5.2.5 创建复合索引 5.3 删除索引 5.3.1 删除索引的语句结构 5.3.2 使用SQL语句删除索引 5.4 视图的基础知识 5.4.1 视图概述 5.4.2 视图的优点与缺点 5.5 视图的基本操作 5.5.1 创建视图的基本语句结构 5.5.2 使用...
  • 1 索引简介索引是与表相关的一个可选结构用以提高 SQL 语句执行性能减少磁盘I/O使用 CREATE INDEX 语句创建索引在逻辑上和物理上都独立于表数据 Oracle 自动维护索引索引有各种类型,除了标准索引外,还有一些...
  • MySQL高级——索引和事务

    千次阅读 热门讨论 2021-03-10 18:18:42
    3、索引的优劣(1)、优点(2)、缺点二、索引的规则1、使用分类2、使用场景三、索引的使用1.创建索引2.查看索引2.删除索引)、事务1.什么是事务2.事务语法3.事务四大特征二、事务隔离级别1.读未提交2...
  • 4、使用视图select * from 视图名5、删除视图drop view 视图名视图作用方便操作 减少复杂SQL语句,增强可读性事务应用场景:银行订单系统定义:是一个操作序列,这些操作要么都执行,要么都不执行,是一个...
  • SQL2005禁用和启用索引

    2010-12-15 15:12:00
    如果你在一张表上禁用一...你可以使用ALTER INDEX REBUILD重新建立一个索引,你也可以使用CREATE INDEX WITH DROP_EXISTING语句启用一个禁用了索引。 创建索引选择合适的可选项  在这个技巧中,我将使用Adventu...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 504
精华内容 201
关键字:

删除一个索引可使用的语句