`

面向程序员的数据库访问性能优化法则

阅读更多


数据库索引的原理非常简单,但在复杂的表中真正能正确使用索引的人很少,即使是专业的
DBA也不一定能完全做到最优。

索引会大大增加表记录的DML(INSERT,UPDATE,DELETE)开销,正确的索引可以让性能提升1001000倍以上,不合理的索引也可能会让性能下降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

给索引查询的值应是已知数据,不能是未知字段值。

注:

经过函数运算字段的字段要使用可以使用函

分享到:
评论

相关推荐

    面向程序员的数据库访问性能优化法则.pdf

    面向程序员的数据库访问性能优化法则.pdf

    2021-2022收藏资料面向程序员的数据库访问性能优化法则.docx

    2021年09月16日

    数据库访问性能优化

    主要介绍了数据库访问性能优化,小编总结了一些面向程序员的基本优化法则,本文将结合实例来坦述数据库开发的优化知识,需要的朋友可以参考下

    亮剑.NET深入体验与实战精要2

    15.5 数据库访问性能优化 562 15.5.1 选择合适的.NET数据供应器 563 15.5.2 及时地关闭数据库连接 563 15.5.3 跟踪监视SQL Server当前链接池状态 564 15.5.4 善用数据库的存储过程 567 15.5.5 SqlDataRead和Dataset...

    亮剑.NET深入体验与实战精要3

    15.5 数据库访问性能优化 562 15.5.1 选择合适的.NET数据供应器 563 15.5.2 及时地关闭数据库连接 563 15.5.3 跟踪监视SQL Server当前链接池状态 564 15.5.4 善用数据库的存储过程 567 15.5.5 SqlDataRead和Dataset...

    asp.net知识库

    DbHelperV2 - Teddy的通用数据库访问组件设计和思考 也论该不该在项目中使用存储过程代替SQL语句 如何使数据库中的表更有弹性,更易于扩展 存储过程——天使还是魔鬼 如何获取MSSQLServer,Oracel,Access中的数据字典...

    决眦入归鸟 Visual C++开发修行实录,完整扫描版

    第1~3章是基础篇,介绍visual c++ 6.0开发所必需具备的基本知识,逐一讲解visual c++ 6.0印象、修炼c++语法、c++面向对象程序设计等领域的知识;第4~8章是核心技术篇,逐一讲解创建mfc应用程序、对话框与控件、...

    决眦入归鸟(附光盘Visual C++开发修行实录)7章

    第1~3章是基础篇,介绍Visual C++ 6.0开发所必需具备的基本知识,逐一讲解Visual C++ 6.0印象、修炼C++语法、C++面向对象程序设计等领域的知识;第4~8章是核心技术篇,逐一讲解创建MFC应用程序、对话框与控件、...

    决眦入归鸟 Visual C++开发修行实录(含光碟1章)

    第1~3章是基础篇,介绍Visual C++ 6.0开发所必需具备的基本知识,逐一讲解Visual C++ 6.0印象、修炼C++语法、C++面向对象程序设计等领域的知识;第4~8章是核心技术篇,逐一讲解创建MFC应用程序、对话框与控件、...

    决眦入归鸟(附光盘Visual C++开发修行实录)8章

    第1~3章是基础篇,介绍Visual C++ 6.0开发所必需具备的基本知识,逐一讲解Visual C++ 6.0印象、修炼C++语法、C++面向对象程序设计等领域的知识;第4~8章是核心技术篇,逐一讲解创建MFC应用程序、对话框与控件、...

    决眦入归鸟(附光盘Visual C++开发修行实录)3章

    第1~3章是基础篇,介绍Visual C++ 6.0开发所必需具备的基本知识,逐一讲解Visual C++ 6.0印象、修炼C++语法、C++面向对象程序设计等领域的知识;第4~8章是核心技术篇,逐一讲解创建MFC应用程序、对话框与控件、...

    决眦入归鸟(附光盘Visual C++开发修行实录)4章

    第1~3章是基础篇,介绍Visual C++ 6.0开发所必需具备的基本知识,逐一讲解Visual C++ 6.0印象、修炼C++语法、C++面向对象程序设计等领域的知识;第4~8章是核心技术篇,逐一讲解创建MFC应用程序、对话框与控件、...

Global site tag (gtag.js) - Google Analytics