`
terry0501
  • 浏览: 313753 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

sql中索引不会被用到的几种情况

    博客分类:
  • sql
 
阅读更多
 
 
1、查询谓词没有使用索引的主要边界,可能会导致不走索引。比如,你查询的是SELECT * FROM T WHERE Y=XXX;假如你的T表上有一个包含Y值的组合索引,但是优化器会认为需要一行行的扫描会更有效,这个时候,优化器可能会选择TABLE ACCESS FULL,但是如果换成了SELECT Y FROM T WHERE Y = XXX,优化器会直接去索引中找到Y的值,因为从B树中就可以找到相应的值。
 
2、如果在B树索引中有一个空值,那么查询诸如SELECT COUNT(*) FROM T 的时候,因为HASHSET中不能存储空值的,所以优化器不会走索引,有两种方式可以让索引有效,一种是SELECT COUNT(*) FROM T WHERE XXX IS NOT NULL或者是不能为空。
 
3、如果在T表上有一个索引Y,但是你的查询语句是这样子SELECT * FROM T WHERE FUN(Y) = XXX。这个时候索引也不会被用到,因为你要查询的列中所有的行都需要被计算一遍,因此,如果要让这种sql语句的效率提高的话,在这个表上建立一个基于 函数的索引,比如CREATE INDEX IDXFUNT ON T(FUN(Y));这种方式,等于Oracle会建立一个存储所有函数计算结果的值,再进行查询的时候就不需要进行计算了,因为很多函数存在不同返回 值,因此必须标明这个函数是有固定返回值的。
 
4、索引不适用于隐式转换的情况,比如你的SELECT * FROM T WHERE Y = 5 在Y上面有一个索引,但是Y列是VARCHAR2的,那么Oracle会将上面的5进行一个隐式的转换,SELECT * FROM T WHERE TO_NUMBER(Y) = 5,这个时候也是有可能用不到索引的。
 
5、在Oracle的初始化参数中,有一个参数是一次读取的数据块的数目,比如你的表只有几个数据块大小,而且可以被Oracle一次性抓取, 那么就没有使用索引的必要了,因为抓取索引还需要去根据rowid从数据块中获取相应的元素值,因此在表特别小的情况下,索引没有用到是情理当中的事情。
6、很长时间没有做表分析,或者重新收集表状态信息了,在数据字典中,表的统计信息是不准确的,这个情况下,可能会使用错误的索引,这个效率可能也是比较低的。
 
在《Oracle专家编程》这本书中,有一个非常不错的例子,在本机实际做一下,能对索引有一个更深的印象,大致就是
CREATE TABLE FOO(USERNAME VARCHAR2(100) PRIMARY KEY,USERID VARCHAR2(100));
产生一堆数据,然后查询SQL
 
CREATE TABLE FOOBAK SELECT * FROM FOO ORDER BY USERID DESC;
然后给USERNAME加上主键索引,然后查询SQL
能够看到两个使用了USERNAME pk  的索引,产生了不同的执行计划,这个实实在在的说明了表的物理结构实实在在的影响了执行计划。
分享到:
评论

相关推荐

    MySQL索引不会被用到的情况汇总

    它有以下几种创建方式: 1.创建索引 代码如下: CREATE INDEX indexName ON mytable(username(length)); 如果是 CHAR,VARCHAR 类型,length 可以小于字段实际长度;如果是 BLOB 和 TEXT 类型,必须指定 length,...

    数据库SQLSERVER索引

    SQLServer中有几个可以让你检测、调整和优化SQLServer性能的工具。在本文中,我将说明如何用SQLServer的工具来优化数据库索引的使用,本文还涉及到有关索引的一般性知识。关于索引的常识影响到数据库性能的最大因素...

    50种方法巧妙优化你的SQL Server数据库

    ### 50种方法巧妙优化你的SQL Server数据库 在日常的数据库管理与维护工作中,我们经常会遇到查询速度慢的问题,这不仅影响了系统的性能,也降低了用户体验。本文将基于给出的信息,详细介绍可能导致查询速度变慢的...

    mysql转化成sql server sql转化成mysql工具

    在实际操作中,还需要考虑以下几点: 1. 数据量:大量数据迁移可能需要更长的时间和更多的资源。 2. 版本兼容性:检查源数据库和目标数据库的版本,确保工具支持这些版本的转换。 3. 安全性:在迁移过程中,确保数据...

    MySQL查询条件中in会用到索引吗

    2. **查询的列表大小**:如果`IN`列表中的值数量较小(通常认为是几十个),MySQL可能会选择使用索引。当列表变得非常大时,MySQL可能会选择全表扫描,因为构建索引的开销可能超过全表扫描。 3. **查询优化器的决策...

    Microsoft_SQL_Server_2005技术内幕:T-SQL查询.pdf

     书中还讲述了其他几种争议较多的构造(camstruct)——如临时表、动态执行、XML和.NET集成——它们在具有强大功能的同时,也具有极大的风险。  本书适合于需要编写或检查T-SQL代码的有经验的T-SQL程序员和数据库...

    SQL的优化.pdf

    在 SQL 优化中,索引是一种非常重要的优化方法。索引可以大大提高查询的速度,特别是在大型表中。索引可以分为两种:聚集索引和非聚集索引。聚集索引是将数据和索引存储在一起,而非聚集索引是将索引存储在单独的...

    SQL Server数据库查询速度慢原因及优化方法

    【赛迪网-IT技术报道】SQL Server数据库查询速度慢的原因有很多,常见的有以下几种:  1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)  2、I/O吞吐量小,形成了瓶颈效应。  3、没有...

    如何设计高效合理的SQL查询语句

    下面将具体介绍几种提升查询效率的有效方法。 ##### 合理使用索引 索引是提高查询效率的关键。合理地创建索引可以极大提升查询速度。以下是几点建议: - **在经常进行连接的列上建立索引**,尤其是在没有指定为...

    全面接触SQL语法SQL命令并不是非常多,可是要把SQL用到出神入化,却也只需要短短几个命令便够,因为SQL命令是针对关系型数据库所建立出来的语法叙述,所以SQL在这类数据库中所发挥的功能非常的强

    SQL(Structured Query Language)是一种用于管理和操作关系型数据库的标准语言,它的强大之处在于其简洁而功能丰富的语法。本文将深入探讨SQL语法的核心概念和常见命令,帮助你掌握SQL的基础并理解其在数据库管理中...

    优化 SQL Server 索引的小技巧

    在本文中,我将说明如何用SQL Server的工具来优化数据库索引的使用,本文还涉及到有关索引的一般性知识。 关于索引的常识 影响到数据库性能的最大因素就是索引。由于该问题的复杂性,我只可能简单的谈谈这个问题,...

    图片存储到SQLServer数据库中

    在IT行业中,数据库是存储和管理数据的核心工具,而SQL Server作为一款强大的关系型数据库管理系统,经常被用于处理各种类型的数据,包括文本、数字以及多媒体文件如图片。本主题聚焦于如何将图片存储到SQL Server...

    asp+sql.rar_ASP 投票系统_asp sql_asp sql 论坛_asp 论坛_sql 投票

    在ASP+SQL的环境中,每个帖子、回帖、用户信息等都会被存储在SQL数据库中。ASP负责处理用户的交互,如登录、发表、编辑和删除帖子,同时从数据库检索信息展示给用户。 5. **新闻管理系统**:ASP可以轻松实现新闻...

    java web +sqlserver2005 学生管理实例

    在本实例中,开发者会用到JDBC来连接SQLServer2005,进行数据的增删改查操作。 4. **Eclipse或IntelliJ IDEA等IDE**:这些集成开发环境为编写Java Web项目提供了便利,包括代码提示、自动构建、调试等功能。 5. **...

    sql server 表数据导出工具

    SQL Server表数据导出工具是数据库管理员和开发人员在日常工作中经常会用到的一种实用程序,它能够方便地将SQL Server数据库中的数据导出为各种格式,例如CSV、XML、Excel或者文本文件,以便进行数据分析、备份、...

    国民经济分类 sql脚本

    在SQL(Structured Query Language)中,编写这样的脚本可能涉及到以下几个核心知识点: 1. **数据库设计**:首先,我们需要设计一个适合存储国民经济分类数据的数据库模式。这可能包括多个表,如`categories`...

    MySQL SQL基础语句最佳实践

    SQL是一种功能强大且用途广泛的数据库编程语言,它由数据查询语言(DQL)、数据操作语言(DML)、事务处理语言(TPL)、数据控制语言(DCL)、数据定义语言(DDL)和指针控制语言(CCL)六个部分组成。 数据查询...

    基于SQL Server的应用程序的优化 (1).pdf

    对规范化进行平衡的方法有以下几种: 1. 增加冗余:包括建立临时表或定义视图以减少频繁出现的多表联结,对经常插入或修改的数据库表中某些仅在查询时才会用到的数据保持一个只读的冗余拷贝,以排除更新操作对锁的...

    简易BBS(ASP.NET+SQL SERVER )

    4. 搜索功能:用户可以搜索特定的帖子或关键词,系统需能够快速准确地返回相关结果,这可能需要用到SQL的全文搜索或者索引功能。 5. 用户个人中心:用户可以查看自己的发帖记录、个人信息,还可以管理私信等。这...

    大家来进行SQL优化

    下面将根据标题“大家来进行SQL优化”以及描述中的优化建议,详细介绍几个关键的SQL优化技巧,帮助大家提高查询效率。 #### 1. 选择合适的驱动表(Driving Table) 在进行多表连接时,选择正确的驱动表可以显著...

Global site tag (gtag.js) - Google Analytics