主键:
能够唯一标识一条记录的字段为主键(亦或主码),不能重复的,不允许为空。
作用:用来保证数据完整性
个数:主键只能有一个

索引:
作用:是提高查询排序的速度
个数:一个表可以有多个索引

常用索引类型:
Non-unique(非唯一索引,常用)
Unique(唯一索引,该字段没有重复值,但可以有一个空值)
Bitmap(位图索引特定于该列只有几个枚举值的情况,比如性别字段,标示字段比如只有0和1的情况)

建立索引的优点:
1. 可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
2. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
3. 可以加速表和表之间的连接。
4. 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

索引有一些先天不足:
1. 建立索引,系统要占用大约为表的1.2倍的硬盘和内存空间来保存索引(现在硬盘和内存的空间都很大,此问题可以忽略)。
2. 更新数据的时候,系统必须要有额外的时间来同时对索引进行更新,以维持数据和索引的一致性(建立索引的查询的效率会大大提高,建立索引的性价比高)。

使用原则:
1. 在大表上建立索引才有意义。
2. 在where子句或是连接条件上经常使用的列上建立索引,很少或从不引用的字段不建索引。
3. 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间。
4. 复合索引的几个字段是否经常同时以AND方式出现在Where子句中,单字段查询极少甚至没有,将这多个字段建立复合索引。
5. 如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引。
6. 索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引。
7. 逻辑型的字段,如男或女(是或否)等,不建立索引。

索引失效情况:
1. != 将不使用索引,索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表中。
2. ||是字符连接函数. 就象其他函数那样,停用了索引。
3. + 是数学函数. 就象其他数学函数那样,停用了索引。
4. like "%_" 百分号在前时,停用了索引。
5. 字符型字段为数字时在where条件里不添加引号时,停用了索引。
6. 单独的>,<。
7. not in ,not exist。

oracle主键和索引的更多相关文章

  1. Oracle基础维护02-表、主键、索引、表结构维护手册

    目录 一.项目新建表.主键.索引注意事项 二.举例说明建表.主建.索引的操作方法 2.1 设定需求如下 2.1.1 查询数据库有哪些表空间 2.1.2 本文档假设数据库有这两个业务用户的表空间 2.2 ...

  2. Oracle 添加主键和索引

    数据的主键和索引一般情况下都是必须的,特别是表有大量数据的时候,索引和主键更是必不可少,这样可以提供数据的查询效率: 一.创建表的同时创建主键约束 (1)无命名 create table studen ...

  3. Oracle外键不加索引会引起死锁问题

    转载链接:http://www.jb51.net/article/50161.htm 这篇文章主要介绍了Oracle外键不加索引引起死锁的情况及解决,需要的朋友可以参考下 --创建一个表,此表作为子表 ...

  4. 删除表空间的时候遇到的问题:ORA-02429: 无法删除用于强制唯一/主键的索引

    今天打算删除orcale数据库中无用的表空间,发现报错,查资料删除,写个过程留着备用.1.drop tablespace dldata INCLUDING CONTENTS CASCADE CONST ...

  5. ora-02429:无法删除用于强制唯一/主键的索引

    今天打算删除orcale数据库中无用的表空间,发现报错,查资料删除,写个过程留着备用. 1.drop tablespace dldata INCLUDING CONTENTS CASCADE CONS ...

  6. oracle主键自增

    oracle主键自增 1建立数据表 create table Test_Increase(            userid number(10) primary key,  /*主键,自动增加*/ ...

  7. SQL语句新建表,同时添加主键、索引、约束

    SQL语句新建数据表   主键,索引,约束 CREATE TABLE [dbo].[T_SendInsideMessageRec]( [SendInsideMID] [uniqueidentifier ...

  8. oracle 主键应用序列和触发器实现自动增长

    oracle 主键自动增长 这几天搞Oracle,想让表的主键实现自动增长,查网络实现如下: create table simon_example ( id number(4) not null pr ...

  9. oracle 主键自动增长

    oracle 主键自动增长 2009-12-11 16:07:00|  分类: 数据库资料|字号 订阅     这几天搞Oracle,想让表的主键实现自动增长,查网络实现如下: create tabl ...

随机推荐

  1. JGUI源码:Tip实现(14)

    tip是当鼠标放到控件上显示的提示文本,下面说下实现思路方法一: 使用hover:before,hover:after组合一个三角符号和一个圆角矩形实现,以右三角为例 .jgui-tip:after ...

  2. Swift 之cannot load module 'main' as 'Swift'

    如果建立一个Project, 选Command Line程序,语言选Swift, 完成之后会有一个main.swift文件.这个文件用来练算法最好了,因为playground会有各种限制而且bug多多 ...

  3. Studio 5000编程:如何判断AB PLC系统中的硬件设备是否在正常工作

    前言:PLC控制系统,主要由CPU.本机架I/O模块,分布式I/O模块,通信模块,或其他设备(如:伺服驱动器.交换机.第三方设备)等组成,如何判断这些设备是否工作正常?或是一旦出现故障,能在第一时间判 ...

  4. Sql server 用T-sql读取本地数据文件dbf的数据文件

    第一步启用Ad Hoc Distributed Queries  在SQLserver执行以下的语句: exec sp_configure 'show advanced options',1 reco ...

  5. 优化算法:AdaGrad | RMSProp | AdaDelta | Adam

    0 - 引入 简单的梯度下降等优化算法存在一个问题:目标函数自变量的每一个元素在相同时间步都使用同一个学习率来迭代,如果存在如下图的情况(不同自变量的梯度值有较大差别时候),存在如下问题: 选择较小的 ...

  6. 从tom大叔那想着拿书的,呵呵。

    //var tgtttime = new Date("2014/05/26 09:59:30"); var tgtttime = new Date("2014/05/26 ...

  7. android 给view添加阴影

    1.方法一: 使用 CardView 布局 <android.support.v7.widget.CardView xmlns:android="http://schemas.andr ...

  8. 2018-2019 网络对抗技术 20165231 Exp4 恶意代码分析

    实验目标 1.是监控你自己系统的运行状态,看有没有可疑的程序在运行. 2.是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,systrac ...

  9. golang interface类型转string等其他类型

    inter 是interface类型,转化为string类型是: str := inter .(string) 转为其他类型也类似

  10. Nginx下配置虚拟主机的三种方法

    Nginx下,一个server标签就是一个虚拟主机. 1.基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站 2.基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站,外部网站的 ...