参考:http://txf2004.iteye.com/blog/1729935
参考:http://guoyankun.iteye.com/blog/1765898
参考:http://yanqingluo.iteye.com/blog/1781671
参考:http://huoli.iteye.com/blog/456799
参考:http://oracledba.iteye.com/blog/448579
概念:
使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。
在表中建立索引,然后在索引中找到符合查询条件的索引值,最后通过保存在索引中的ROWID(相当于页码)快速找到表中对应的记录。
优点:
1.大大加快数据的检索速度;
2.创建唯一性索引,保证数据库表中每一行数据的唯一性;
3.加速表和表之间的连接;
4.在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。
索引的缺点:
1.索引需要占物理空间。建立索引,系统要占用大约为表的1.2倍的硬盘和内存空间来保存索引。
2.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。
使用索引原则:
在大表上建立索引才有意义。
在where子句或是连接条件上经常饮用的列上建立索引。
索引的层次不要超过4层。
如果表主要是提供查询,那么在经常查询的字段上建立索引。
作为通用规则,只有当经常查询索引列中的数据时,才需要在表上创建索引。
可以基于数据库表中的单列或多列创建索引。多列索引使您可以区分其中一列可能有相同值的行。
经常被用来搜索数据记录的字段
尽量不要为数据内容重复率很高的字段创建索引,它所带来的效益很少
数据记录越多,索引提高数据访问的效率的幅度就越明显
确定索引的有效性:
1.检查查询的 WHERE 和 JOIN 子句。在任一子句中包括的每一列都是索引可以选择的对象。
2.对新索引进行试验以检查它对运行查询性能的影响。
3.考虑已在表上创建的索引数量。最好避免在单个表上有很多索引。
4.检查已在表上创建的索引的定义。最好避免包含共享列的重叠索引。
5.检查某列中唯一数据值的数量,并将该数量与表中的行数进行比较。比较的结果就是该列的可选择性,这有助于确定该列是否适合建立索引,如果适合,确定索引的类型。
6.查询操作中的order by 语句的数据排序,group by 语句的数据分组,连接表
索引的分类:
1.普通索引(INDEX):这是最基本的索引类型,它没有唯一性之类的限制。创建普通索引的关键字是INDEX。create index 索引名 on 表名(字段名,。。。);
2.唯一性索引(UNIQUE):在一个表上可以创建多个,索引值不能重复。允许有空值。create unique index 索引名 on表名(字段名,。。。)
3.主键索引(PRIMARY KEY):在一个表上只能创建一个主键,主键字段不能出现重复值,不允许为空。
4.全文索引(FULLTEXT):create fulltext index 索引名 on 表名(字段名,。。。);
5.聚集索引:在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。
按存储结构分:聚集索引,非聚集索引
按照数据存储方式:可以分为B*树、反向索引、位图索引。
按照索引列的个数分类:可以分为单列索引、复合索引。
按照索引列值的唯一性:可以分为唯一索引和非唯一索引。
此外还有函数索引,全局索引,分区索引,函数索引
逻辑上:
Single column 单行索引
Concatenated 多行索引
Unique 唯一索引
NonUnique 非唯一索引
Function-based函数索引
Domain 域索引
物理上:
Partitioned 分区索引
NonPartitioned 非分区索引
B-tree:
Normal 正常型B树
Rever Key 反转型B树
Bitmap 位图索引
主键一唯一索引的区别:
1 一个表的主键只能有一个,而唯一索引可以建多个。
2 主键可以作为其它表的外键。
3 主键不可为null,唯一索引可以为null。
适合使用聚集索引的情况:
1 如果某字段所包含的有差别的数据的数目有限,则非常适合为该字段创建聚集索引
2 使用betwwen,>,<,>=与<=等运算符返回介于特定范围的数据记录的查询
3 按照特定次序访问的字段
4 返回大量结果集的查询
5 经常用于查询的连接条件或group by语句的字段
6 使用聚集索引搜索为一键列的速度一非常快
索引的结构:
B-tree索引:
基于二叉树的,由分支块(branch block)和叶块(leaf block)组成。
默认情况下大多使用Btree索引,该索引就是通常所见 唯一索引、聚簇索引等等。
适合与大量的增、删、改(OLTP);
不能用包含OR操作符的查询;
适合高基数的列(唯一值多)
典型的树状结构;
每个结点都是数据块;
大多都是物理上一层、两层或三层不定,逻辑上三层;
叶子块数据是排序的,从左向右递增;
在分支块和根块中放的是索引的范围;
但当检查的范围超过表的10%时就不能提高取回数据的性能。
反向索引,降序索引。
Bitmap索引:
适合与决策支持系统,OLAP(联机数据分析)方面,数据仓库方面,或静态数据,不支持行级锁定。
做UPDATE代价非常高;
非常适合OR操作符的查询;
基数比较少的时候才能建位图索引,用于低cardinality列(即列的唯一值除以行数为一个很小的值,接近零)。
位图以一种压缩格式存放,节省存储空间。
在索引中使用位图而不是列值,使用位图作为键值,对于表中的每一数据行位图包含了TRUE(1)、FALSE(0)、或NULL值。
通常在事实表和维表的键之间有很低的集的势(cardinality),使用位图索引,存储更为有效。
位图索引将比较,连接和聚集都变成了位算术运算,大大减少了运行时间,从而得到性能上的极大的提升。
相关推荐
#define INDEX_NUM 1 /*数据库的索引数*/ #define FIELD_NUM 4 /*多域编辑器域数,数据库的字段数*/ #define KEYFIELD 0 /*数据库的关键字段号*/ #define ROWSPACE 2 /*多域编辑器的行间距*/ #define ...
内容索引:PHP源码,其它类别,数据库操作类 数据库执行语句,可执行查询添加修改删除等任何sql语句,无论做什么都要无私,只有大家好才是真的好,如果使用有任何问题请联系告知本人,交流就是相互促进的大舞台…… ...
数据库索引设计与优化是数据库管理系统中至关重要的一个环节,它直接影响到数据查询的效率、存储空间的使用以及系统的整体性能。在这个主题中,我们将深入探讨数据库索引的基础概念、设计原则、优化策略以及实际应用...
1. **索引优化**:索引是数据库快速查找数据的关键。为频繁用于查询的列创建合适的索引可以显著提高查询速度。然而,过多的索引会增加写操作的开销,因此需要平衡读写需求,合理选择索引类型(如唯一索引、主键索引...
数据库索引是数据库管理系统中一个至关重要的概念,它在数据检索和性能优化方面扮演着核心角色。本篇文章将深入探讨索引的实质及其在不同场景下的应用,旨在帮助用户更有效地利用索引来提升数据库操作的速度。 首先...
4. **索引与性能优化**:讲解了索引的概念和作用,如何创建和管理索引以提高查询性能,并讨论了索引的类型,如唯一索引、全文索引、聚集索引和非聚集索引。 5. **存储过程与触发器**:解释存储过程的编写和使用,...
在Java高端培训中,Oracle数据库的设计是至关重要的一个环节,因为它是支撑企业级应用系统稳定运行的基础。Oracle数据库是全球广泛使用的大型关系型数据库管理系统,尤其在处理复杂数据和高并发场景时,其性能和稳定...
active_record_doctor, 确定数据库出现问题之前的问题 Active Record 医生Active Record 医生帮助使数据库保持良好的形状。 目前,它可以:索引取消索引外键检测无关索引检测未索引的deleted_at 列检测缺少的外键...
这门课程深入探讨了数据库系统的高级概念和技术,涵盖了数据模型、查询处理、事务管理、并发控制、存储结构、索引技术等多个关键领域。课后作业是检验学生对这些知识理解程度的重要方式,而提供的标准答案与助教的...
数据库索引设计原则 数据库索引设计原则是 Oracle 数据库管理系统中的一项重要技术,旨在提高数据库的查询效率和性能。以下是数据库索引设计原则的详细解释。 一、基本原则 数据库索引设计原则的基本原则是确保...
高清完整版 数据库索引设计与优化 高清完整版 数据库索引设计与优化
数据库索引是数据库性能优化的重要手段之一。创建索引可以提高查询速度,降低数据库的负载,提高数据的安全性。本文将详细介绍数据库创建索引的原则、分类、创建方法、管理和优化等方面的知识点。 索引的概念和优点...
### 屏蔽数据库表索引的例子 在数据库管理与优化的过程中,索引是提高查询效率的重要工具之一。...然而,这也需要我们在理解和掌握数据库索引原理的基础上,合理运用这些技巧,才能发挥出最大的效果。
1. **DDL (Data Definition Language 数据定义语言)**:用于定义数据库对象,例如创建、删除和修改数据库、表、视图、索引等。 - **创建 (CREATE)**:用于创建新的数据库或表。 - **删除 (DROP)**:用于删除现有的...
《20计科专升本_20302081028_马金贺_数据库实验报告》这份压缩包文件包含了重要的学习资源,主要聚焦于数据库领域的实践操作和理论理解。作为计算机科学与技术专业升本课程的一部分,这份实验报告无疑对学生深入掌握...
数据库索引重建及修复语句
MySQL数据库优化是一个涵盖广泛的主题,包括但不限于查询优化、索引优化、存储引擎选择、数据库架构设计、资源管理和配置调整等多个方面。以下是对这些关键领域的详细解释: 1. **查询优化**:这是数据库优化的核心...
同时,以索引列形式存储BLOB的能力提高了处理二进制大对象的效率。 ### SQLite API概览 SQLite提供了丰富的API,涵盖了数据库的创建、打开、查询、更新和关闭等操作。对于简单的应用程序而言,仅需使用`sqlite3_...
MiniSQL是一款小型的SQL模拟器,它主要用于帮助用户理解和学习SQL的基本操作,如创建数据库、定义表格结构、插入数据以及删除表格等。这个程序通过一个简单的界面,为初学者提供了实践SQL语句的平台,无需实际连接到...
本文将深入探讨数据库中的非聚集索引、聚集索引以及索引模式的概念,并分析它们之间的区别。 首先,让我们了解一下**非聚集索引**。非聚集索引在数据库中不按照数据的实际物理顺序存储。每个非聚集索引条目包含键值...