数据库索引的原理非常简单,但在复杂的表中真正能正确使用索引的人很少,即使是专业的DBA也不一定能完全做到最优。
索引会大大增加表记录的DML(INSERT,UPDATE,DELETE)开销,正确的索引可以让性能提升100,1000倍以上,不合理的索引也可能会让性能下降100倍,因此在一个表中创建什么样的索引需要平衡各种业务需求。
索引常见问题:
索引有哪些种类?
常见的索引有B-TREE索引、位图索引、全文索引,位图索引一般用于数据仓库应用,全文索引由于使用较少,这里不深入介绍。B-TREE索引包括很多扩展类型,如组合索引、反向索引、函数索引等等,以下是B-TREE索引的简单介绍:
B-TREE索引也称为平衡树索引(Balance Tree),它是一种按字段排好序的树形目录结构,主要用于提升查询性能和唯一约束支持。B-TREE索引的内容包括根节点、分支节点、叶子节点。
叶子节点内容:索引字段内容+表记录ROWID
根节点,分支节点内容:当一个数据块中不能放下所有索引字段数据时,就会形成树形的根节点或分支节点,根节点与分支节点保存了索引树的顺序及各层级间的引用关系。
一个字典按部首+笔划数的目录,相当于给字典建了一个按部首+笔划的组合索引。
一个表中可以建多个索引,就如一本字典可以建多个目录一样(按拼音、笔划、部首等等)。
一个索引也可以由多个字段组成,称为组合索引,如上图就是一个按部首+笔划的组合目录。
SQL什么条件会使用索引?
当字段上建有索引时,通常以下情况会使用索引:
INDEX_COLUMN = ?
INDEX_COLUMN > ?
INDEX_COLUMN >= ?
INDEX_COLUMN < ?
INDEX_COLUMN <= ?
INDEX_COLUMN between ? and ?
INDEX_COLUMN in (?,?,...,?)
INDEX_COLUMN like ?||'%'(后导模糊查询)
T1. INDEX_COLUMN=T2. COLUMN1(两个表通过索引字段关联)
SQL什么条件不会使用索引?
查询条件
|
不能使用索引原因
|
INDEX_COLUMN <> ?
INDEX_COLUMN not in (?,?,...,?)
|
不等于操作不能使用索引
|
function(INDEX_COLUMN) = ?
INDEX_COLUMN + 1 = ?
INDEX_COLUMN || 'a' = ?
|
经过普通运算或函数运算后的索引字段不能使用索引
|
INDEX_COLUMN like '%'||?
INDEX_COLUMN like '%'||?||'%'
|
含前导模糊查询的Like语法不能使用索引
|
INDEX_COLUMN is null
|
B-TREE索引里不保存字段为NULL值记录,因此IS NULL不能使用索引
|
NUMBER_INDEX_COLUMN='12345'
CHAR_INDEX_COLUMN=12345
|
Oracle在做数值比较时需要将两边的数据转换成同一种数据类型,如果两边数据类型不同时会对字段值隐式转换,相当于加了一层函数处理,所以不能使用索引。
|
a.INDEX_COLUMN=a.COLUMN_1
|
给索引查询的值应是已知数据,不能是未知字段值。
|
注:
经过函数运算字段的字段要使用可以使用函
|
分享到:
相关推荐
面向程序员的数据库访问性能优化法则 本文面向数据库应用开发的程序员,旨在提供实用的数据库访问性能优化法则。以下是本文的要点: 一、数据库访问性能优化法则简介 为正确的优化SQL,我们需要快速定位性能瓶颈...
### 面向程序员的数据库访问优化原则 #### 引言 随着信息技术的快速发展,数据库作为数据管理和存储的核心工具,在企业级应用中的地位日益凸显。然而,如何有效地提高数据库访问性能成为了众多程序员面临的挑战之一...
### 面向程序员的数据库访问性能知识点 #### 一、引言 在现代软件开发过程中,数据库性能优化是一项至关重要的任务。对于程序员而言,掌握一定的数据库访问性能优化技巧不仅能够提升应用程序的整体性能,还能减轻...
2021年09月16日
本文将从五个层次介绍面向程序员的数据库访问性能优化法则。 1. **减少数据访问(减少磁盘访问)** 磁盘I/O是数据库系统中的瓶颈之一,降低数据访问次数可以显著提升性能。优化策略包括: - 使用索引:合理创建和...
在《OracleDBA手记3》的第三章节中,叶正盛同学聚焦于数据库性能优化与内部原理的解析,特别是针对数据库访问性能的优化法则。尽管这部分内容最初是面向程序员的,但它同样对数据库管理员(DBA)具有重要的参考价值。...
数据库知识包括关系型数据库的基本概念(如ER模型、SQL语句)、数据库设计(范式理论)、事务处理、索引优化等。熟悉数据库操作和设计原理,能有效提高数据管理与查询效率。 通过学习《程序员软考合订本》中的历年...
5. **面向程序员的数据库访问性能优化法则**: 数据库性能优化是提高应用程序效率的关键。可能涉及索引优化、SQL查询优化、事务处理和连接池的使用等方面。 6. **Linux Bash Shell快速入门**: Linux Shell是操作...
对数据库安全性和性能调优也应有一定了解。 六、软件工程 软件开发过程中的文档编写、版本控制(如Git)、项目管理、测试方法(如单元测试、集成测试)以及软件质量保证等都是初级程序员应知应会的知识点。 通过...
面试时,面试官可能会让你编写SQL语句,或者讨论如何优化数据库性能。 七、软件工程与设计模式 软件开发流程、敏捷开发、版本控制、测试方法、设计模式等,都是衡量一个程序员综合能力的重要指标。了解这些可以提升...
这份资源旨在帮助开发者全面提升其在Java领域的专业素养,包括但不限于编程基础、面向对象设计原则、异常处理、集合框架、多线程、网络编程、数据库操作以及高级特性等。 1. **Java编程基础**:这部分内容将引导...
11. **性能优化**:如何提高Java应用的性能是每个程序员都需要关注的问题,书中将探讨内存管理、垃圾回收机制以及性能监控工具的使用。 12. **职业规划与发展**:除了技术知识,书里还会讨论Java程序员的职业发展...