zoukankan      html  css  js  c++  java
  • SQL SERVER数据库索引(学习笔记)

    定义:索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。

     

    优点与缺点:建立索引的目的是加快对表中记录的查找排序。

          为表设置索引要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。

     

    可以在数据库设计器中创建三种索引:唯一索引、主键索引和聚集索引

     唯一索引 唯一索引是不允许其中任何两行具有相同索引值的索引。

     

      当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。例如,如果在employee表中职员的姓(lname)上创建了唯一索引,则任何两个员工都不能同姓。

     

      主键索引

     

      数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。

     

      在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。

     

      聚集索引

     

      在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。

     

      如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。

     

    实例:

    CREATE TABLE mytable(

     

      idserial primary key,

     

      category_id int not null default0,

     

      user_id int not null default0,

     

      adddate int not null default0 

      );

    如果在查询时常用类似以下的语句: 

      SELECT * FROM mytable WHERE category_id=1; 

      最直接的应对之道,是为category_id建立一个简单的索引: 

      CREATE INDEX mytable_categoryid ON mytable (category_id);

      SELECT * FROM mytable WHERE category_id=1 AND user_id=2;

      第一反应可能是,再给user_id建立一个索引。不好,这不是一个最佳的方法。可以建立多重的索引。

       CREATE INDEX mytable_categoryid_userid ON mytable(category_id,user_id);

     

    SELECT * FROM mytable 

      WHERE category_id=1 AND user_id=2 

      ORDER BY add date DESC; 

      很简单,就象为where字句中的字段建立一个索引一样,也为ORDERBY的字句中的字段建立一个索引: 

      CREATE INDEX mytable_categoryid_userid_adddate ON mytable (category_id,user_id,adddate);

  • 相关阅读:
    Socket网络通信之数据传递
    多线程中join()的用法
    JAVA多线程实现的三种方式
    通过读取配置文件,启动mongodb
    利用ajax获取网页表单数据,并存储到数据库之二(使用SSH)
    利用ajax获取网页表单数据,并存储到数据库之一(使用JDBC)
    Null reference pointer was passed to the stub when not debugging with IE
    代码生成了解
    Linq to sql 入门
    SharePoint 2013 入门
  • 原文地址:https://www.cnblogs.com/fjzhang/p/2487530.html
Copyright © 2011-2022 走看看