`

限制索引

阅读更多

1. 使用不等于操作符(<>!=
       
下面的查询即使在cust_rating列有一个索引,查询语句仍然执行一次全表扫描。
         select cust_Id,cust_name
         from   customers
         where  cust_rating <> 'aa';
        
把上面的语句改成如下的查询语句,这样,在采用基于规则的
        
优化器而不是基于代价的优化器(更智能)时,将会使用索引。
         select cust_Id,cust_name
         from   customers
         where  cust_rating < 'aa' or cust_rating > 'aa';
    
特别注意:通过把不等于操作符改成OR条件,就可以使用索引,以避免全表扫描。

 

2. 使用IS NULL IS NOT NULL
   使用IS NULL IS NOT NULL同样会限制索引的使用。因为NULL值并没有被定义。在SQL语句中使   用    NULL会有很多的麻烦。因此建议开发人员在建表时,把需要索引的列设成NOT NULL。如果被索引   的列在某些行中存在NULL值,就不会使用这个索引(除非索引是一个位图索引

3. 使用函数
如果不使用基于函数的索引,那么在SQL语句的WHERE子句中对存在索引的列使用函数时,会使优化器忽略掉这些索引。 下面的查询不会使用索引(只要它不是基于函数的索引)
          select empno,ename,deptno
          from   emp
          where  trunc(hiredate)='01-MAY-81';
         
把上面的语句改成下面的语句,这样就可以通过索引进行查找。
          select empno,ename,deptno
          from   emp
          where  hiredate<(to_date('01-MAY-81')+0.9999);

 

4. 比较不匹配的数据类型
        
比较不匹配的数据类型也是比较难于发现的性能问题之一。
        
注意下面查询的例子,account_number是一个VARCHAR2类型,
        
account_number字段上有索引。下面的语句将执行全表扫描。
         select bank_name,address,city,state,zip
         from   banks
         where  account_number = 990354;
         Oracle
可以自动把where子句变成to_number(account_number)=990354,这样就限制了
         
索引的使用,改成下面的查询就可以使用索引:
         select bank_name,address,city,state,zip
         from   banks
         where  account_number ='990354';
    
特别注意:不匹配的数据类型之间比较会让Oracle自动限制索引的使用,
       
即便对这个查询执行Explain Plan也不能让您明白为什么做了一次全表扫描

分享到:
评论

相关推荐

    oracle索引被限制的一些情况

    使用 IS NULL 或 IS NOT NULL 也会限制索引的使用。因为 NULL 值并没有被定义。在 SQL 语句中使用 NULL 会有很多的麻烦。因此,建议开发人员在建表时,把需要索引的列设成 NOT NULL。如果被索引的列在某些行中存在 ...

    MySQL-数据库-索引详解

    ###限制索引的数目 索引数目不是越多越好,每个索引都占用磁盘空间,索引越多,需要磁盘空间越多。修改表时,对索引的重构和更新很麻烦。越多的索引,更新表浪费更多的时间。 ###尽量使用数据量少的索引 索引值很...

    window全盘索引文件

    3. 如果希望减少系统资源占用,可以在“高级”选项中调整索引设置,比如禁用不常用的特性,或者限制索引更新的时间。 优化全盘索引服务: 1. 确保索引位置位于快速访问的磁盘分区,如SSD,以加快检索速度。 2. 定期...

    Oracle索引优化相关

    在实际应用中,一些开发人员可能会因为不当使用SQL语句而限制索引的使用,这会导致性能问题。 1. **使用不等于操作符(、!=)**: - **问题描述**:当WHERE子句中使用`&lt;&gt;`或`!=`等不等于操作符时,即使被比较的列...

    Oracle 索引 详解

    在本文中,我们将详细介绍 Oracle 索引的创建、特点、不足、创建索引列的特点、不应该建索引列的特点、限制索引等方面的知识点。 一、索引介绍 索引是 Oracle 数据库中的一种数据结构,它可以加快数据的检索速度,...

    导致索引失效的口诀.pdf

    如果不限制索引列是not null,数据库底层的 sql优化器 会觉得该字段可能存在空值,就会走全表扫描,导致索引失效。解决方法是将索引列设置为not null,避免空值的存在。 5. 运:索引上的运算 在索引上进行运算都...

    Oracle优化全攻略一【Oracle 索引概念】.docx

    正确选择和设计索引,避免使用限制索引的因素,能显著提高查询性能,减少数据库响应时间,从而提升整个系统的性能。在实践中,需要结合业务需求和查询模式,灵活运用这些知识,进行有效的索引优化。

    mysql索引与视图的实例附答案宣贯.pdf

    4. 限制索引的数目; 5. 尽量使用数据量少的所以; 6. 尽量使用前缀来索引; 7. 删除不再使用或者很少使用的索引。 实践题1: CREATE TABLE workInfo( id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT, ...

    sql优化、索引的建立和运用以及多表连接建索引的拙劣见解

    - 对于`CHAR`和`VARCHAR`类型,可以指定`length`来限制索引大小。 - `BLOB`和`TEXT`类型的字段,`length`参数通常不适用。 2. **修改表结构添加索引**: - 语法:`ALTER TABLE tableName ADD INDEX [indexName] ...

    mysql索引与视图的实例附答案.docx

    限制索引的数目;尽量使用数据量少的索引;尽量使用前缀来索引;删除不再使用或者很少使用的索引。 在实践中,我们可以使用 CREATE INDEX 语句创建索引,ALTER TABLE 语句修改索引,DROP INDEX 语句删除索引。例如...

    C#索引器的讲解(1)

    例如,你可能希望限制索引范围,或者实现多维索引等。 不过,虽然索引器非常有用,但也要注意过度使用。如果一个类的访问方式更适合用方法而不是索引器,那么过度依赖索引器可能会使代码变得难以理解和维护。 总结...

    Oracle索引详解

    限制索引指的是在某些情况下,索引不能发挥作用,常见的限制索引的情况包括: - 使用不等于操作符(`&lt;&gt;`或`!=`)的查询语句,这可能导致索引失效,从而执行全表扫描。 综上所述,Oracle索引是提升数据库查询性能的...

    Oracle DBA实战索引优化

    - **限制索引使用的情况**:某些情况下,即使有索引,Oracle也可能选择不使用。比如使用不等于运算符(`&lt;&gt;`或`!=`)时,索引通常不会被利用。这是因为这种查询通常返回的结果集较大,全表扫描可能更快。 #### 五、...

    072401MySQL索引2

    其中,`index_name`是索引的名称,`table_name`是表名,`column_name`是字段名,`length`可选,用于限制索引的长度。`USING`关键字指定索引类型,默认为BTREE。`COMMENT`可以添加对索引的描述。此外,可以使用`ALTER...

    Oracle索引优化

    **限制索引** 索引的使用受限于查询语句的编写方式。以下是一些常见问题: 1. **不等于操作符**:使用`&lt;&gt;`或`!=`可能导致全表扫描,改写为`和`&gt;`的OR条件可以利用索引。 2. **IS NULL或IS NOT NULL**:在WHERE子句中...

    [三思笔记]全面学习分区表及分区索引.pdf

    同时,分区可以帮助限制索引的大小,降低维护成本。 4. 实际应用: 在大数据环境中,如电子商务、银行交易、电信行业等,分区表和分区索引广泛用于处理海量数据。例如,电商网站可能按时间分区订单数据,以便快速...

    4.索引类型1

    同样,`length`参数可以用来限制索引的字符长度。 3. 主键索引(PRIMARY KEY) 主键是表中的一个或多个列,它们的组合具有唯一性且不允许NULL值。主键索引自动创建并维护,可以快速定位到特定行。创建带有主键的表...

    Oracle数据库经典优化之索引原理篇

    最后,比较不匹配的数据类型也会限制索引的使用,例如字符串与整数的比较,应确保数据类型的匹配,以充分利用索引。 选择性是衡量索引效率的重要指标,它表示索引列中不同值的比例。选择性越高,索引的区分度越大,...

    Oracle数据库--索引讲义.pptx

    管理索引的原则包括:在导入数据后创建索引以避免频繁更新,只在经常检索的字段上创建索引(如果检索数据少于表的15%),并限制索引的数量以减少修改表时的额外开销。示例中通过对比创建索引前后的查询开销,可以...

    索引视图触发器PPT学习教案.pptx

    创建索引时应遵循一些原则,如为唯一值字段设置索引,为经常用作查询条件的字段创建索引,限制索引数量,使用数据量小的字段,并考虑使用前缀索引。 接下来,我们讨论【视图】。视图是从一个或多个表中导出的虚拟表...

Global site tag (gtag.js) - Google Analytics