`

程序员对索引的误解

 
阅读更多

1、索引中最常见的就是B树索引,B树索引的实现与二叉查找树相似,但是B的意思不是binary,而是balance(平衡)。 

2、B树索引上的每个结点都是一个块,有叶子块和分支块之分。块中的数据包括各个索引以及一个rowid。走索引查询时,会按照树的分支将需要查询数据路径上的相应的分支块和叶子块读到内存。 

3、B树索引不存在非唯一性条目,在一个非唯一性索引中,Oracle会把rowid作为一个额外的列追加到键上,使得键唯一。非唯一性索引,会先按索引键值排序,然后按rowid升序排序。 

4、B树索引时高度平衡的,大多数情况,B树索引的高度都是2或3,即使索引数百万行记录也是如此。这说明,一般情况,在索引中找到键值只需2到3次IO(2到3个数据块)。 

5、通常有两种使用索引的方法: 
 (1)索引用于访问表中的行,访问表中很少一部分行。 
这是DBA给的经验值: 
小表(记录数小于10000行的表):筛选比例<10%; 
大表:(筛选返回记录数)<(表总记录数*单条记录长度)/10000/16 
      单条记录长度≈字段平均内容长度之和+字段数*2 
(2)索引用于回答一个查询,索引中的信息足够回答整个查询。

 

6、不能视图加索引,视图只是存储了一种查询,具体的访问还是要访问基表。

 

7、B树索引不会存储null的条目。

 

8、外键上要加索引,否则容易造成死锁。

 

9、组合索引,查询时只使用单一或没有加上全部的索引条件的查询。

 

10、count查询默认是会走B树索引的,但是如果索引建在可能为null的字段上,则不会走索引查询(因为B树索引不能允许null,使用索引查出的count和使用表查询出来的count可能1出现不一致情况)。

 

11、索引列上使用函数或使用数据类型转化函数,将会不走索引查询。

 

12、优化器拒绝使用索引查询,优化器绝大多数时候是英明的,不要贸然强制使用索引。

 

13、没有将最有差别的列放在索引最前面会使索引更小或更有效率的说法,实际上,如果使用索引键压缩,情况恰恰相反(即把没有差别的列放在索引最前面最优的做法)。

分享到:
评论

相关推荐

    程序员专用数据库字典生成器

    数据库字典生成器是程序员在开发过程中非常实用的工具,它能够自动化地为数据库中的表、字段等元素创建详细的文档,极...对于程序员来说,掌握这类工具的使用不仅能提升工作效率,还能减少因沟通不畅导致的误解和错误。

    HelpPC 2.0程序员工具

    【描述】"HelpPC 2.0程序员工具" 提供了多种对PC进行辅助和支持的功能,适用于企业内部IT支持团队或个人用户解决技术问题。其重复提及的标题暗示该软件可能具有强大的功能和重要性,对于处理复杂的电脑问题可能尤其...

    Java程序员常用英语单词800+

    Java编程语言是全球范围内...熟练掌握这些词汇有助于程序员更准确地理解和阅读Java API文档,提高编程效率,减少误解和错误。在学习和实践中,不断积累和巩固这些专业词汇,对于成为一名专业的Java开发人员至关重要。

    JAVA程序员面试经验.pdf,这是一份不错的文件

    8. **数据库相关**:对比EJB中的QL(如JPA)与SQL,能编写简单的SQL查询语句,理解数据库事务、索引和优化策略。 9. **EJB**:CMP(容器管理持久化)中的Home接口和Remote接口的实现,理解EJB容器的角色和工作方式...

    让程序员都费解的10大编程语言特性

    Ruby 把 0 视为真值,这与许多其他语言(如C、Python)不同,可能会导致逻辑判断上的误解,尤其是对于习惯了其他语言的程序员。 6. Python 的空格缩进: Python 通过缩进来定义代码块,这使得代码更易读,但也...

    PHP程序设计-3期(KC016) 2.7.4 数组操作(排序)常见问题.docx

    然而,许多初学者会误解为`ksort()`将对原始数组进行排序,而忽略了`rsort()`的影响。实际上,`ksort()`只会对未被改变的索引数组有效。在本例中,`ksort()`的使用是无效的,因为`rsort()`已改变了数组的结构。 要...

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

    综上所述,通过合理使用索引、避免或简化排序以及消除对大型表的顺序存取等方法,可以显著提升SQL查询的性能。这些技术不仅适用于特定的数据库系统(如Informix),也广泛适用于其他主流数据库管理系统。最终目的是...

    金和C6数据库-数据字典.rar

    通过数据字典,他们可以快速定位所需信息,提高工作效率,同时避免对数据库结构的误解和误操作。因此,维护和更新一个完整且准确的数据字典对于任何使用金和C6数据库的企业来说都是至关重要的。

    数据库设计说明书(模板).docx

    - **索引设计**:为了提高查询性能,需要考虑哪些字段需要创建索引,以及选择合适的索引类型(如主键索引、唯一索引、全文索引等)。 - **数据表关系**:描述表之间的关系,如一对一、一对多、多对多,以及关系的...

    给产品经理讲技术.pdf 产品经理需要懂的那些技术

    "给产品经理讲技术"这本书旨在帮助非技术背景的产品经理更好地理解技术概念,提高与开发人员的协作效率,降低沟通成本,避免因技术知识的鸿沟导致的误解和延误。 在序言中,作者强调这不是一本深入技术的专著,而是...

    国家标准_软件设计文档

    国家制定的软件设计文档标准,是为了统一行业内软件开发过程中的规范,减少由于沟通不明确导致的误解和错误,提高软件项目的成功率。这些标准通常包括对需求分析、系统架构、模块设计、接口定义、数据结构、算法选择...

    数据结构原理与经典问题求解(源代码) + 勘误表

    勘误表是书籍中常见的一种补充资料,用于指出原书中可能存在的错误或疏漏,帮助读者避免误解,确保学习的准确性。在学习过程中,参考勘误表可以减少因错误信息导致的困惑,提高学习效率。 总的来说,"数据结构原理...

    C缺陷与陷阱(笔记)

    【C缺陷与陷阱】这篇笔记主要探讨了C语言中容易造成误解和问题的特性,旨在帮助程序员避免因不熟悉语言细节而引发的错误。以下是笔记的主要内容概览: 1. **词法缺陷**: - **= 不是 ==**:在C语言中,单个等号`=`...

    SourceInsight 汉化版 附带 CDKEY

    - **文化交流**:使用母语工具有助于程序员之间的交流和协作,避免因语言差异引起的误解。 3. **安装与激活** 源文件中提到的"CDKEY"指的是软件的序列号,用于验证和激活SourceInsight汉化版。安装程序后,用户...

    国标 软件开发 文档模板 15个

    6. **数据库设计文档**:对于包含数据库的项目,这份文档会详述数据模型,包括实体关系图、表结构、索引和存储过程。 7. **接口设计文档**:定义了软件与其他系统、硬件或服务的交互方式,包括APIs、Web服务或其他...

    软件详细设计文档2

    3. **数据结构和数据库设计**:详细设计文档会包含对数据结构的定义,如数组、链表、树等,以及数据库的表结构、索引和关系设计,确保数据的有效管理和高效访问。 4. **算法设计**:文档中会详细列出关键算法的设计...

    软件标准开发文档下载,本人一直使用

    它包含伪代码、类图、序列图、用例图等,以便程序员能明确理解如何编程实现每个功能。详细设计文档是编码的直接依据,有助于减少编码过程中的误解和错误。 4. **数据库设计说明书**:这部分文档主要描述数据库的...

    (word完整版)c程序设计复习资料试题及答案版.doc

    13. **描述错误**:这部分未提供具体选项,但通常错误的描述可能涉及对窗体属性、事件或操作的误解。 这些知识点涵盖了C#程序设计的基础,包括语法、数据类型、控制结构、类与接口、异常处理、数据库交互、Windows...

    软件工程详细设计说明书.doc

    《软件工程详细设计说明书》是软件开发过程中至关重要的文档,它详细阐述了系统的设计细节,为程序员提供了清晰的实现指南。这份文档主要包括以下几个部分: 1. 引言 - 编写目的:这部分旨在明确设计说明书的作用...

Global site tag (gtag.js) - Google Analytics