`
manjingtou
  • 浏览: 120490 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

索引的使用

阅读更多

索引的简单使用说明:

一.常用扫描方式:
.全表扫描
 全表扫描就是顺序地访问表中每条记录.
.索引扫描  
索引唯一扫描(index unique scan)
索引范围扫描(index range scan)
索引全扫描(index full scan)
索引快速扫描(index fast full scan) 

1.索引唯一扫描(index unique scan)
通过唯一索引查找一个数值经常返回单个ROWID。如果该唯一索引有多个列组成(即组合索引),则至少要有组合索引的引导列参与到该查询中,如创建索引:create index index_test on building(name,status)。
如:语句:
select id from building where name='国际科技大厦'
此语句可以使用该索引。如果该语句只返回一行,则存取方法称为索引唯一扫描。
而语句:
select name from building where status ='1'
因为where条件没有用到索引的引导列。所以索引不生效。

2.索引范围扫描(index range scan)
使用一个索引存取多行数据,同上面一样,如果索引是组合索引
如:select id from building where name like 'H%' and status='1' 语句返回多行数据,此时的存取方法称为索引范围扫描。
使用index rang scan的3种情况:
(a) 在唯一索引列上使用了range操作符(> < <> >= <= between)
(b) 在组合索引上,只使用部分列进行查询,导致查询出多行
(c) 对非唯一索引列上进行的任何查询。

3. 全索引扫描(index full scan)
SQL请求的全部列(column)必须驻留在索引树中;也就是说,SELECT和WHERE字句中的所有数据列必须存在于索引中。并且排序返回。

4.索引快速扫描(index fast full scan)
扫描索引中的所有的数据块,与 index full scan很类似,但是一个显著的区别就是它不对查询出的数据进行排序,即数据不是以排序顺序被返回。

 

二.什么情况下应该建立索引
1.表的主关键字(建立唯一索引)
2.表的字段唯一约束
3.直接条件查询的字段,在SQL中用于条件约束的字段
4.查询中与其它表关联的字段,字段常常建立了外键关系
5.查询中排序的字段
6.查询中统计或分组统计的字段

三.什么情况下应不建或少建索引
1.表的记录很少
2.对一些经常处理的业务表应在查询允许的情况下尽量减少索引
3.数据重复且分布平均的表字段
假如一个表有10万行记录,有一个字段A只有T和F两种值,且每个值的分布概率大约为50%,那么对这种表A字段建索引一般不会提高数据库的查询速度

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

2.带通配符(%)的like语句
如: select * from building where name like '%中心%'
name为building表的索引,则此索引就不会生效,这里由于通配符(%)在搜寻词首出现,通配符如此使用会降低查询速度。然而当通配符出现在字符串其他位置时,优化器就能利用索引
select * from building where name like '&中心%'

3. Order by语句
  ORDER BY语句决定了如何将返回的查询结果排序,任何在Order by语句的非索引项或者有计算表达式都将降低查询速度。order by后面的排序字段尽量使用索引字段。

4.'<>'的用法
例如:
select * from building where id<>5000;
select * from building where id>5000 or id<5000
结果一样,但是第二句id索引生效。

5.可以使用外部连接优化not in子句,例如:
select name from building where fk_building in (select deptid from test where name='test' and ifdeleted=0);
  
改为:
select name from building a,test b where a.fk_building=b.id and b.name='test' and ifdeleted=0;

6.索引列是否函数的参数。如是,索引在查询时用不上。

7.主从表关联方式
如果:building.id上有一索引
在district.id上有索引
如:
select contract_code from building a,district b where a.id=b.id
building.id上的索引就会生效
反之同理。


8.是否存在潜在的数据类型转换。如将字符型数据与数值型数据比较,ORACLE会自动将字符型用to_number()函数进行转换,从而导致上一种现象的发生。


9.索引应用的优先级;

(1).唯一性索引的等级高于非唯一性索引. 这个规则只有当WHERE子句中索引列和常量比较才有效.如果索引列和其他表的索引类相比较. 这种子句在优化器中的等级是非常低的.

(2).如果多个索引在一个查询中都可应用,那么如果条件中应用索引和常量进行比较,那么这个索引先被利用。


10.语句的执行计划中有不良索引时,可以人为地屏蔽该索引,方法:
  
  。数值型:在索引字段上加0,例如
  select * from building where id+0 = 0;
  
  。字符型:在索引字段上加‘’,例如
  select * from building where name||’’='test';

 

 

 

分享到:
评论

相关推荐

    oracle索引使用样例

    ### Oracle索引使用样例详解 #### 一、索引并行创建 在Oracle数据库中,并行创建索引可以显著提高创建索引的速度,尤其是在处理大量数据时。下面的SQL语句展示了如何并行创建一个索引: ```sql CREATE INDEX IDX_GD...

    Oracle 索引 使用方法

    Oracle 索引 使用方法,索引 使用原理, 索引 使用顺序过程

    索引使用规则.txt

    根据“索引使用规则.txt”文件提供的信息,我们可以深入探讨一系列关于索引使用的最佳实践与限制条件,以下是对这些规则的详细解析: ### 1. 索引与逻辑运算符的兼容性 当在WHERE子句中使用`NOT`或`LIKE '%XX%'`这...

    MySQL索引 使用笔记

    本笔记将深入探讨MySQL中的索引使用,旨在帮助你提升数据库性能。 1. 索引的概念与类型: - 索引是一种数据结构,用于快速定位表中的特定行,类似于书籍的目录。 - MySQL支持多种类型的索引,包括B-Tree(默认)...

    V1.0-sqlServer索引使用总结.docx

    SQL Server 索引使用总结 本文档总结了 SQL Server 中索引的使用方法、分类和注意事项,并提供了实践测试的示例代码。 索引的使用目的 索引的使用目的主要是为了提高查询速度和效率。通过创建索引,可以快速地...

    11、MongoDB聚合操作及索引使用详解-ev.rar

    11、MongoDB聚合操作及索引使用详解_ev.rar11、MongoDB聚合操作及索引使用详解_ev.rar11、MongoDB聚合操作及索引使用详解_ev.rar11、MongoDB聚合操作及索引使用详解_ev.rar11、MongoDB聚合操作及索引使用详解_ev.rar...

    Oracle 监控索引使用率脚本分享

    例如,脚本的输出显示了几个表的索引使用情况,如ACC_POS_CASH_PL_TBL_ARC表的主键索引PK_ACC_POS_CASH_PL_ARCH_TBL,执行了多次RANGE SCAN, UNIQUE SCAN, SAMPLE FAST FULL SCAN和SKIP SCAN操作。通过比较不同操作...

    mysql高性能索引查询(查询性能问题、索引使用原则、索引创建、索引的优点缺点).docx

    ##### 2、索引使用原则 索引的使用并非越多越好,而是在充分理解业务场景的基础上,根据查询需求来设计。例如,在电商系统中: - **用户方**:通常会基于用户ID(user_id)进行查询,也可以通过订单号(order_no)查询...

    MySQL 进阶-索引使用规则

    以下将详细介绍MySQL中的索引使用规则及其相关知识。 1. **创建索引** - **CREATE INDEX** 语句用于在表的列上创建索引,例如:`CREATE INDEX idx_name ON table_name (column_name);` - **唯一性索引**:`UNIQUE...

    索引使用技巧大全宝典

    【索引使用技巧大全宝典】 索引是数据库系统中不可或缺的一部分,它们极大地提升了数据检索的速度,尤其是在处理大规模数据时。然而,不恰当的索引使用可能会适得其反,影响数据库性能。以下是对索引使用技巧的深入...

    74 再来看看几个最常见和最基本的索引使用规则l.pdf

    在本文中,我们将探讨几个最常见和最基本的索引使用规则,特别关注联合索引的使用,这是多列索引的一种,可以帮助进一步优化数据库的查询性能。 首先,我们需要了解等值匹配规则。当我们在WHERE子句中使用等号进行...

    函数索引使用

    ### 函数索引使用 #### 一、函数索引(Function-Based Index)概念与作用 函数索引(Function-Based Index, FBI),是Oracle数据库自Oracle 8i版本引入的一种特殊类型的索引。它允许在创建索引时使用任意内置或...

    索引使用简介.doc

    【索引使用简介】 在数据库管理系统中,索引是一种数据结构,它能够加快对表中数据的访问速度。索引的使用是优化SQL查询性能的关键因素,但也需要谨慎处理,因为它们会对数据插入、更新和删除操作(DML操作)产生...

    表排序 索引使用 使用plist文件存储数据

    在IT行业中,表排序、索引使用以及使用plist文件存储数据是常见的操作,尤其是在数据库管理和移动应用开发中。下面将详细讲解这三个知识点。 首先,**表排序**是数据处理的基础,无论是在关系型数据库中还是在内存...

    SQL Server索引使用的几个误区.pdf

    标题中提到的“SQL Server索引使用的几个误区.pdf”指明了文档的主题是关于SQL Server数据库中索引的使用,同时强调了一些常见错误和误解。这部分内容通常会涉及索引在数据库中的作用、种类以及如何正确使用索引来...

    SQL索引使用方略(系统而全面)

    ### SQL索引使用方略(系统而全面) #### 一、引言 索引是数据库管理系统(DBMS)中用于提高数据检索速度的重要工具之一。它能够显著提升查询性能,但同时也可能对插入、更新和删除操作的速度产生负面影响,并且会占用...

    计算机等考三级数据库辅导:谈索引使用的误区.docx

    【计算机等考三级数据库辅导:谈索引使用的误区】 在数据库设计中,索引是一种重要的优化工具,用于加速数据检索。然而,对于索引的使用,存在一些常见的误区,这可能会导致性能下降而非提升。本文将探讨这些误区,...

    行业-74 再来看看几个最常见和最基本的索引使用规则l.rar

    本资料“行业-74 再来看看几个最常见和最基本的索引使用规则l.rar”可能包含了一份详细的文档,探讨了数据库索引的基本原则和常见应用。下面,我们将深入讲解一些关于索引的重要知识点。 首先,了解索引的工作原理...

    SQL Server 索引结构及其使用(聚集索引与非聚集索引)

    "SQL Server 索引结构及其使用(聚集索引与非聚集索引)" 数据库索引是数据库性能优化的关键技术之一。SQL Server 提供了两种索引:聚集索引(clustered index)和非聚集索引(nonclustered index)。本文将详细介绍...

    计算机等考三级数据库辅导:其他书上没有的索引使用经验总结.docx

    本篇文章将深入探讨一些关于索引使用的经验总结,这些经验可能在传统的教材或书籍中较少提及,但对实际数据库操作有显著的影响。 首先,我们要理解索引的基本概念。索引是数据库管理系统为了加速数据检索而创建的一...

Global site tag (gtag.js) - Google Analytics