本文共 2832 字,大约阅读时间需要 9 分钟。
一索引
1.什么是索引 索引是对数据库表中一列或多列的值进行排序的一种结构。 在关系型数据库中索引是一种与表有关的数据库结构是事实存在的。它可以使对于表的select等等操作更加快速相当于一本书的目录。 对于一张表如果我们想要找到某一列符合特定值的记录第一种方法是全表搜索匹配然后把所有符合的记录列出但是这样做会消耗大量数据库系统时间并造成大量磁盘I/O操作第二种就是在表中建立索引然后在索引中找到符合查询条件的索引值最后通过保存在索引中的ROWID相当于页码快速找到表中对应的记录。 索引是一个单独的、物理的数据库结构它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。由此可知索引是要消耗数据库空间的。 并非所有的数据库都以相同的方式使用索引。作为通用规则只有当经常查询索引列中的数据时才需要在表上创建索引。索引占用磁盘空间并且降低添加、删除和更新行的速度。在多数情况下索引用于数据检索的速度优势大大超过它的不足之处。但是如果应用程序非常频繁地更新数据或磁盘空间有限则可能需要限制索引的数量。 可以使用单列作为索引也可以使用多列联合作为索引。 2.索引的优缺点 优点 1大大加快数据的检索速度; 2创建唯一性索引保证数据库表中每一行数据的唯一性; 3加速表和表之间的连接; 4在使用分组和排序子句进行数据检索时可以显著减少查询中分组和排序的时间。 缺点 1索引需要占物理空间。 2当对表中的数据进行增加、删除和修改的时候索引也要动态的维护降低了数据的维护速度。 建立索引时的注意事项 1考虑已在表上创建的索引数量。最好避免在单个表上有很多索引 2检查已在表上创建的索引的定义。最好避免包含共享列的重叠索引 3检查某列中唯一数据值的数量并将该数量与表中的行数进行比较。比如如果有1000w记录某字段为性别只有男女。也就是说一半的记录都是重复的这样就要考虑是否还有必要建立索引了。3.一些索引类别
1普通索引 也即不加任何限制的索引。 2唯一索引 一种索引不允许具有索引值相同的行从而禁止重复的索引或键值。系统在创建该索引时检查是否有重复的键值并在每次使用 INSERT 或 UPDATE 语句添加数据时进行检查。 3主键索引 数据库表经常有一列或列组合其值唯一标识表中的每一行。该列称为表的主键。它和唯一索引的共性在于都不允许有重复记录区别在于唯一索引是不限制null的也就是说或可以有一条以上的null值插入但是主键却限定不能为空。 4聚簇索引和非聚簇索引 聚簇索引也叫簇类索引是一种对磁盘上实际数据重新组织以按指定的一个或多个列的值排序。由于聚簇索引的索引页面指针指向数据页面所以使用聚簇索引查找数据几乎总是比使用非聚簇索引快。每张表只能建一个聚簇索引并且建聚簇索引需要至少相当该表120%的附加空间以存放该表的副本和索引中间页。 聚簇是根据码值找到数据的物理存储位置从而达到快速检索数据的目的。Oracle聚簇索引的顺序就是数据的物理存储顺序叶节点就是数据节点。非聚簇索引的顺序与数据物理排列顺序无关叶节点仍然是索引节点只不过有一个指针指向对应的数据块。由于聚簇索引要按照索引排序所以一个表最多只能有一个聚簇索引但可以使用多列。 ORACLE中的聚簇表是指两个表有一个字段完全相同并且在业务中经常会按这个字段为目标连接这两个表这时建立聚簇表 两个表公用一个字段能减少占用空间并能明显提高连接查询速度。 这两篇都有实际的例子这里就不再深入讨论了。 建立聚簇索引的思想 1、大多数表都应该有聚簇索引或使用分区来降低对表尾页的竞争在一个高事务的环境中对最后一页的封锁严重影响系统的吞吐量。 2、在聚簇索引下数据在物理上按顺序排在数据页上重复值也排在一起因而在那些包含范围检查(between、<、<=、<>、>=)或使用group by或orderby的查询时一旦找到具有范围中第一个键值的行具有后续索引值的行保证物理上毗连在一起而不必进一步搜索避免了大范围扫描可以大大提高查询速度。 3、在一个频繁发生插入操作的表上建立聚簇索引时不要建在具有单调上升值的列(如IDENTITY)上否则会经常引起封锁冲突。 4、在聚簇索引中不要包含经常修改的列因为码值修改后数据行必须移动到新的位置。 5、选择聚簇索引应基于where子句和连接操作的类型。 具体的聚簇索引请参考以下文章二键
1.什么叫键 数据库中的键key又称为关键字是关系模型中的一个重要概念它是逻辑结构不是数据库的物理部分。 2.唯一键 唯一键即一个或者一组列其中没有重复的记录。可以唯一标示一条记录。 3.主键 属于唯一键是一个比较特殊的唯一键。区别在于主键不可为空。 4.外键 如果公共关键字在一个关系中是主关键字那么这个公共关键字被称为另一个关系的外键。由此可见外键表示了两个关系之间的联系。以另一个关系的外键作主关键字的表被称为主表具有此外键的表被称为主表的从表。外键又称作外关键字。换而言之如果关系模式R中的某属性集不是R的主键而是另一个关系R1的主键则该属性集是关系模式R的外键通常在数据库设计中缩写为FK。 外键在开发中基本使用不到主要是数据库用来保证数据的完整性的 举个简单的例子 表A内有列C1 表B内有列C2 将C2的外键指向C1 那么当你向表B插入数据时C2的内容必须为C1中的一个 还有几个约束需要你设置 如删除或者修改表A中的字段时怎么处理表B中相关联的数据 5.父键 对于有外键关系的2张表存在外键的表所参照的表叫主表而存在外键的表叫从表。三约束
像主键、唯一等等其实都是一种约束。 其中主键约束比唯一约束更严格不能为空。 四键、索引、约束的区别 一般我们看到术语“索引”和“键”交换使用但实际上这两个是不同的。索引是存储在数据库中的一个物理结构键纯粹是一个逻辑概念。键代表创建来实施业务规则的完整性约束。索引和键的混淆通常是由于数据库使用索引来实施完整性约束。 (1)主键索引和主键有什么关系 主键索引是创建主键的时候系统自动创建的索引主键要求不重复不为空但是他如何判断有效率呢当然是建索引了老是全表遍历还不疯掉。 所以建立主键会自动的建立主键索引。 (2)主键和唯一键的区别在于唯一键可以为空主键不可以 (3)建立唯一约束和唯一索引又什么区别 同理建立唯一约束的时候也会自动的创建唯一索引。建立唯一索引可以说是唯一约束的一种手段。 基本上实现起来是没有什么区别的。如果实在理解不了就当一样好了。 (4)聚簇索引和非聚簇索引有何区别 这个上边已经讲和很详细了还附有两篇文章这里就不说了。 (5) 约束和主键有什么区别 约束一般有主键约束外键约束唯一约束等。 分别为primary keyforeign keyunique 其中主键约束只是约束的一种。 其实他们是不同概念的东西。转载地址