1.索引的概念

  根据书的目录可以知道内容所在的页码,不用一页一页翻书,可直接通过页码找到内容。数据库的索引类似于书本的目录,索引指向内容存储位置,可直接定位到内容而不必扫描整张表,减少了磁盘的I/O次数。 

  聚集索引: 根据拼音查找汉字(认识的字)。我们把这种索引的顺序也就是数据的物理顺序的方式称为聚集索引。因为数据的物理顺序只有一种,所以一个表只能有一个聚集索引。聚集索引效率高,但对数据更新影响大,不适用于频繁更新的列。

  非聚集索引:根据偏旁查找到该字所在的页码,然后通过页码找到汉字(不认识的字)。我们把这种数据存储在一个地方,索引存储在另一个地方,索引带有一指针指向数据的存储位置的方式称为非聚集索引。聚集索引效率低,影响小。  

  ROWID存储了行在数据库文件中的具体位置:64位(A-Z, a-z, 0-9, +, /),ROWID由四部分组成:OOOOOOOFFFBBBBBBRRR

    OOOOOO:数据对象编号(6位显示)

    FFF:相关数据文件编号(3位显示)

    BBBBBB:数据块编号(6位显示)

    RRR:数据块中行编号(3位显示)

2.索引的优/缺点

  (1)大大提高数据检索、分组、排序的速度

  (2)对数据库表进行增、删、改操作需要动态维护索引需要耗费时间,数据量越大,耗时越多

  (3)每个索引会占用一定的物理空间

3.索引字段选择注意

  (1)WHERE、ORDER BY子句中使用最频繁的字段

  (2)经常被分组排序的列

  (3)连接两个表的连接字段

  (4)具有高选择性(相同值少)的字段

  (5)小字段上(不要在大的文本字段甚至超长字段上建立索引)

  (6)不会经常更新的字段

  (7)索引字段尽量使用数字型字段,字符类型会逐个比较字符串中的每个字符,而数字只需比较一次。

  (8)尽可能使用varchar/nvarchar代替char/nchar,因为变长字段存储空间小,效率高些。

  (9)如果单列索引中包含空值,索引中将不存在此记录。如果复合索引的每个列都为空,索引中不存在此记录;至少有一个列不为空,此记录存在于索引中。

4.复合索引建立

  (1)若几个字段经常同时以AND方式出现在WHERE子句中,且单字段查询比较少,则考虑建立复合索引。

  (2)复合索引的字段个数一般不要超过3个

  (3)如果既有单字段索引,又有这几个字段的复合索引,一般可以删除复合索引

  (4)考虑将WHERE子句中使用最频繁的字段放在复合索引的第一位。若使用频率相同,数据在物理上按某一个字段排序的,则将这个字段放在复合索引的第一位;若使用频率相同,则将最具选择性的字段排在最前面,将最不具选择性的字段排在最后面。

  (5)复合索引的第一列作为条件才能保证系统使用该索引,且让条件中的字段顺序与索引顺序一致。

5.索引操作注意

  (1)不要对索引列进行is null, is not null判断

  (2)不要对索引列使用!=, <>, >操作符和NOT操作  

  (3)不要对索引列进行函数、算术或其他表达式(如+, ||)运算

  (4)不要对索引使用带通配符%的like操作

  (5)显示转换数据类型。当比较不同数据类型的数据时, ORACLE自动对其进行类型转换,当字符和数值比较时, ORACLE会优先将数值类型转换成字符类型。因为内部发生的类型转换, 这个索引将不会被使用。

[04] SQL语句优化之索引的更多相关文章

  1. 三,mysql优化--sql语句优化之索引一

    1,需求:如何在一个项目中,找到慢查询的select,mysql数据库支持把慢查询语句,记录到日志中.供程序员分析.(默认不启用此功能,需要手动启用) 修改my.cnf文件(有些地方是my.ini) ...

  2. 数据库基础知识详解四:存储过程、视图、游标、SQL语句优化以及索引

    写在文章前:本系列文章用于博主自己归纳复习一些基础知识,同时也分享给可能需要的人,因为水平有限,肯定存在诸多不足以及技术性错误,请大佬们及时指正. 11.存储过程 ​ 存储过程是事先经过编译并存储在数 ...

  3. MYSQL学习笔记——sql语句优化之索引

    上一篇博客讲了可以使用慢查询日志定位耗时sql,使用explain命令查看mysql的执行计划,以及使用profiling工具查看语句执行真正耗时的地方,当定位了耗时之后怎样优化呢?这篇博客会介绍my ...

  4. 四,mysql优化——sql语句优化之索引二

    1,在什么列适合添加索引 (1)较频繁的作为查询条件字段应该添加索引 select * from emp where empid = 2; (2)唯一性太差的字段不适合添加索引,即时频繁作为查询条件. ...

  5. 数据库 基于索引的SQL语句优化之降龙十八掌(转)

    一篇挺不错的关于SQL语句优化的文章,因不知原始出处,故未作引用说明! 1 前言      客服业务受到SQL语句的影响非常大,在规模比较大的局点,往往因为一个小的SQL语句不够优化,导致数据库性能急 ...

  6. 关于索引的sql语句优化之降龙十八掌

    1 前言       客服业务受到SQL语句的影响非常大,在规模比较大的局点,往往因为一个小的SQL语句不够优化,导致数据库性能急剧下降,小型机idle所剩无几,应用服务器断连.超时,严重影响业务的正 ...

  7. SQL语句优化、mysql不走索引的原因、数据库索引的设计原则

    SQL语句优化 1 企业SQL优化思路 1.把一个大的不使用索引的SQL语句按照功能进行拆分 2.长的SQL语句无法使用索引,能不能变成2条短的SQL语句让它分别使用上索引. 3.对SQL语句功能的拆 ...

  8. 优化数据库的方法及SQL语句优化的原则

    优化数据库的方法: 1.关键字段建立索引. 2.使用存储过程,它使SQL变得更加灵活和高效. 3.备份数据库和清除垃圾数据. 4.SQL语句语法的优化.(可以用Sybase的SQL Expert,可惜 ...

  9. oracle之sql语句优化

    oracle之sql语句优化 sql语句的优化 1.在where子句中使用 is null 或 is not null 时,oracle优化器就不能使用索引了. 2.对于有连接的列,即使最有一个是静态 ...

随机推荐

  1. 声明了包的类Java命令找不到或无法加载主类

    首先你需要配置环境变量: CLASSPATH=.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar java 命令会在 CLASSPATH 目录下找相应 ...

  2. Umbraco Form需要引用些客户端dependencies (jquery)

    Preparing your frontend In order to work correctly Umbraco Forms needs some client dependencies, bei ...

  3. SQL Server中取两个表的交集,并集和差集

    在项目中遇到要取两个表差集的情况 假设有两个表tblNZPostCodes, NZPostcode  两个表中存储的都是新西兰的post code信息,字段一致,只是数据上有所差异. 1. Union ...

  4. 转载 在.net中使用GAC

    转载出处 https://blog.log4d.com/2011/01/gac/ GAC GAC是什么?是用来干嘛的?GAC的全称叫做全局程序集缓存,通俗的理解就是存放各种.net平台下面需要使用的d ...

  5. UVA 10806 Dijkstra, Dijkstra.(费用流)

    n个点的无向带权图,求1->n的最短往返路径,不走重复边. 这里涉及到一个知识点:求无向图上s->t的最短路,其实就是费用流. 而求1->n最短往返路径呢?增加源点s,由s到1加弧, ...

  6. CSS构造模型

    div 边距 边框 定位 浮动 21.1 div 部分(division)---<div>元素,经常以div形式引用---是XHTML元素,用于定义XHTML文件中的区域. 1.添加div ...

  7. angular的filter

    angular的filter filter两种用法 1.在模板中使用filter {{expression|filter}}//基本用法 {{expression|filter1|filter2|fi ...

  8. 认识CoreData-高级用法

    来源:伯乐在线专栏作者 - 刘小壮 链接:http://ios.jobbole.com/87293/ 点击 → 了解如何加入专栏作者 认识CoreData-初识CoreData 认识CoreData- ...

  9. Xcode7如何添加pch文件

    我们在写项目的时候,大部分宏定义,头文件导入都在这里,Xcode6去掉Precompile Prefix Header的主要原因可能在于Prefix Header大大的增加了Build的时间.但是没有 ...

  10. cocos2d-x中,简单html富文本显示

    作者:HU 转载请注明,原文链接:http://www.cnblogs.com/xioapingguo/p/4037414.html  虽然自从cocos2d-x更新到3.0后,使用freetype, ...