SQL Server和Oracle数据库索引介绍

SQL Server 和 Oracle 数据库索引介绍1 SQL Server 中的索引 索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。索引包含由表或视图中的一列或多列生成的键。这些键存储在一个结构(B 树)中,使 SQL Server 可以快速有效地查找与键值关联的行。表或视图可以包含以下类型的索引:聚集索引聚集索引根据数据行的键值在表或视图中排序和存储这些数据行。索引定义中包含聚集索引列。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序排序。只有当表包含聚集索引时,表中的数据行才按排序顺序存储。如果表具有聚集索引,则该表称为聚集表。如果表没有聚集索引,则其数据行存储在一个称为堆的无序结构中。每个表几乎都对列定义聚集索引来实现下列功能:1、可用于经常使用的查询。2、提供高度唯一性。在创建聚集索引之前,应先了解数据是如何被访问的。考虑对具有以下特点的查询使用聚集索引:使用运算符(如 BETWEEN、、=、 SELECT * from hr.jobs 2 WHERE job_title between a and ZZZZZZZZZZZ ; cution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=33) 1 0 FILTER 2 1 TABLE ACCESS (FULL) OF JOBS (Cost=2 Card=1 Bytes=33) SQL DROP INDEX IDX_jobs_title ; SQL CREATE INDEX IDX_jobs_title on hr.jobs (job_title ); SQL Select * FROM hr.jobs 2 Where job_title between a and ZZZZZZZZZZZ ; cution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=33) 1 0 FILTER 2 1 TABLE ACCESS (FULL) OF JOBS (Cost=2 Card=1 Bytes=33)位图索引位图索引(bitmap index)是从 Oracle7.3 版本开始引入的。目前 Oracle 企业版和个人版都支持位图索引,但标准版不支持。位图索引是为数据仓库/在线分析查询环境设计的,在此所有查询要求的数据在系统实现时根本不知道。位图索引特别不适用于 OLTP 系统,如果系统中的数据会由多个并发会话频繁地更新,这种系统也不适用位图索引。位图索引是这样一种结构,其中用一个索引键条目存储指向多行的指针;这与 B*树结构不同,在 B*树结构中,索引键和表中的行存在着对应关系。在位图索引中,可能只有很少的索引条目,每个索引条目指向多行。而在传统的 B*树中,一个索引条目就指向一行。B* 树索引一般来讲应当是选择性的。与之相反,位图索引不应是选择性的,一般来讲它们应该“没有选择性“ 。如果有大量在线分析查询,特别是查询 以一种即席方式引用了多列或者会生成诸如 COUNT 之类的聚合,在这样的环境中,位图索引就特别有用 。位图索引使用 CREATE BITMAP INDEX index_name ON table_name(column_name1,column_name2) TABLESPACE tablespace_name 命令语法创建。SQL Server 查询优化技术及索引From: SQL Server 中,索引是通过二叉树的数据结构来描述的,我们可以这么理解聚簇索引:索引的叶节点就是数据节点。而非聚簇索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。如下图:非聚簇索引 聚簇索引 聚簇索引与非聚簇索引的本质区别到底是什么?什么时候用聚簇索引,什么时候用非聚簇索引? 这是一个很复杂的问题,很难用三言两语说清楚。我在这里从 SQL Server 索引优化查询的角度简单谈谈 (如果对这方面感兴趣的话,可以读一读微软出版的《Microsoft SQL Server 2000 数据库编程》第 3 单元的数据结构引论以及第 6、13 、14 单元)。一、索引块与数据块的区别 大家都知道,索引可以提高检索效率,因为它的二叉树结构以及占用空间小,所以访问速度块。让我们来算一道数学题:如果表中的一条记录在磁盘上占用 1000 字节的话,我们对其中 10 字节的一个字段建立索引,那么该记录对应的索引块的大小只有 10 字节。我们知道,SQL Server的最小空间分配单元是“页(Page )”,一个页在磁盘上占用 8K 空间,那么这一个页可以存储上述记录 8 条,但可以存储索引 800 条。现在我们要从一个有 8000 条记录的表中检索符合某个条件的记录,如果没有索引的话,我们可能需要遍历 8000 条×1000 字节/8K 字节=1000 个页面才能够找到结果。如果在检索字段上有上述索引的话,那么我们可以在 8000 条×10 字节/8K 字节=10 个页面中就检索到满足条件的索引块,然后根据索引块上的指针逐一找到结果数据块,这样 IO 访问量要少的多。二、索引优化技术 是不是有索引就一定检索的快呢?答案是否。有些时候用索引还不如不用索引快。比如说我们要检索上述表中的所有记录,如果不用索引,需要访问 8000 条×1000 字节/8K 字节=1000 个页面,如果使用索引的话,首先检索索引,访问 8000 条×10 字节/8K 字节=10 个页面得到索引检索结果,再根据索引检索结果去对应数据页面,由于是检索所有数据,所以需要再访问 8000 条×1000 字节/8K 字节=1000 个页面将全部数据读取出来,一共访问了 1010 个页面,这显然不如不用索引快。SQL Server 内部有一套完整的数据检索优化技术,在上述情况下,SQL Server 的查询计划(Search Plan)会自动使用表扫描的方式检索数据而不会使用任何索引。那么 SQL Server 是怎么知道什么时候用索引,什么时候不用索引的呢? SQL Server 除了日常维护数据信息外,还维护着数据统计信息,下图是数据库属性页面的一个截图:从图中我们可以看到,SQL Server 自动维护统计信息,这些统计信息包括数据密度信息以及数据分布信息,这些信息帮助 SQL Server 决定如

oracle数据库索引介绍,SQL Server和Oracle数据库索引介绍相关推荐

  1. Oracle 数据库、Microsoft SQL Server、MySQL 数据库三种常见数据库的区别深度剖析

    文章目录 前言 一.ORACLE 数据库 二.Microsoft SQL Server 数据库 三.MySQL 数据库 总结 前言 Oracle 数据库.Microsoft SQL Server.My ...

  2. sql查询oracle数据,sql-server – 从SQL Server查询Oracle数据库

    我有一个Oracle 11g XE数据库,我想将其转移到SQL Server Express 2005中. 起初我以为我只是在Oracle中生成表作为SQL,操纵数据格式,并在SQL Server中运 ...

  3. tpc ds 导入到oracle,用TPC-DS测试Sql server,Oracle

    TPC-DS是什么 TPC-DS是TPC组织发布的用于测试决策系统的基准测试,是TPC-H的改进版.我们可以用它生成测试数据集和sql语句来测试数据库的OLAP能力. 最近我们用TPC-DS测试了一下 ...

  4. maven中的oracle,maven中安装SQL SERVER 和 Oracle JDBC驱动

    都什么年代了,居然MS SQL 和 Oracle的jdbc驱动还不支持maven,只能自己弄一下了. SQL SERVER 2.install jar文件到maven: mvn install:ins ...

  5. 数据库管理工具神器-DataGrip,可同时管理多个主流数据库[SQL Server,MySQL,Oracle等]连接

    日常开发中少不了各种可视化数据库管理工具.如果需要同时能连接多种数据库,大家肯定都会想到 DBeaver.Navicat Premium.本文介绍另一个十分好用且强大的工具:DataGrip. Dat ...

  6. python数据库管理软件_数据库管理工具神器-DataGrip,可同时管理多个主流数据库[SQL Server,MySQL,Oracle等]连接 - Python社区...

    DataGrip :Jet Brains出品的一款数据库管理工具(没错,是Jet Brains出品,必属精品).DataGrip整合集成了当前主流数据库(如:SQL Server, MySQL, Or ...

  7. 小麦苗数据库巡检脚本,支持Oracle、MySQL、SQL Server和PG等数据库

    文章目录 一.巡检脚本简介 二.巡检脚本特点 三.巡检结果展示 1.Oracle数据库 2.MySQL数据库 3.SQL Server数据库 4.PG数据库 5.OS信息 四.脚本运行方式 1.Ora ...

  8. DB(一):数据库概述、SQL概述、Oracle数据类型

    文章目录 ORACLE SQL 一.数据库概述 1.DB和DBMS 2.Oracle数据库概述 3.DB2数据库概述 4.SQL Server数据库概述 5.MySQL数据库概述 二.SQL概述 1. ...

  9. sql的介绍——SQL Server数据库管理系统

    SQL Server是微软公司推出的关系数据库管理系统,使用客户机/服务器体系结构. ,具有以下特点: 使用方便(可以图形界面操作) 可伸缩性好(做大数据库可以,也可以做小数据库) 与相关软件集成程度 ...

最新文章

  1. 【深度学习】(4) 梯度下降、损失函数
  2. linux cuda 如何编译器,linux – Cuda编译器不使用GCC 4.5
  3. 项目下创建文件_Linux 下创建和使用交换文件
  4. 【书单】推荐几本AI好书
  5. MongoDB复制集搭建主服务器模拟切换
  6. 字符串属性和函数的使用
  7. idea lombok插件安装_开发效率不高?墙裂推荐这十款精选 IntelliJ IDEA 插件
  8. java.util.function包下的四大Function
  9. 1209-纯碱跌8%,菜粕大涨4%
  10. Markdown中的二级标题去掉默认的下划线
  11. 使用java代码打印三角形、平行四边形、菱形
  12. STM32F103ZE uIP DM9051 SPI以太网移植指南
  13. STL容器底层数据结构
  14. 正面管教读书笔记 08 班会
  15. 如何针对时间片论法进行优化
  16. python3安装PIL
  17. 5G NR标准 第4章 LTE概述
  18. 婚纱影楼,网络营销策划经典案例《缩减版》
  19. 计算机cpu散热方式,调整电脑CPU散热风扇转速的简单方法【图文】
  20. 用python读取股票价格_我用Python分析股票价格走势,学以致用获取第一桶金!

热门文章

  1. Qt学习之路(60): 创建shared library
  2. Shell脚本学习-阶段二十七-命令解释一
  3. iF.SVNAdmin
  4. 「管理数学基础」3.3 凸分析:凸函数的极值和凸规划
  5. java查询mongodb 嵌套,查询嵌套文件mongoDB
  6. java防止浏览器直接打开下载的文件
  7. 三维点云学习(1)下-点云体素降采样
  8. 微信快速开发框架(五)-- 利用快速开发框架,快速搭建微信浏览博客园首页文章...
  9. linux内核文件恢复,linux下系统文件恢复
  10. C语言实现行列式和代数余子式