一、索引
    1、为什么使用索引?
    2、怎样使用索引?
    3、使用索引有什么好处?
    
    实际问题:“tb1”的“meterno”字段 和 “tb1”的 “alertcode”字段做个索引,应该怎样做?二、触发器
    1、为什么使用触发器?
    2、怎样使用触发器?
    3、使用触发器有什么好处?    实际问题:为“WarnUse”表做一个触发器,每当“WarnUse”表中有数据插入时,就执行一个插入过程insert into      WarnCount('','','',''),应该怎么做呢?    

解决方案 »

  1.   

    索引基础知识,摘之联机丛书索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。索引包含由表或视图中的一列或多列生成的键。这些键存储在一个结构(B 树)中,使 SQL Server 可以快速有效地查找与键值关联的行。表或视图可以包含以下类型的索引:聚集
    聚集索引根据数据行的键值在表或视图中排序和存储这些数据行。索引定义中包含聚集索引列。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序排序。
    只有当表包含聚集索引时,表中的数据行才按排序顺序存储。如果表具有聚集索引,则该表称为聚集表。如果表没有聚集索引,则其数据行存储在一个称为堆的无序结构中。
    非聚集
    非聚集索引具有独立于数据行的结构。非聚集索引包含非聚集索引键值,并且每个键值项都有指向包含该键值的数据行的指针。
    从非聚集索引中的索引行指向数据行的指针称为行定位器。行定位器的结构取决于数据页是存储在堆中还是聚集表中。对于堆,行定位器是指向行的指针。对于聚集表,行定位器是聚集索引键。
    您可以向非聚集索引的叶级添加非键列以跳过现有的索引键限制(900 字节和 16 键列),并执行完整范围内的索引查询。有关详细信息,请参阅具有包含列的索引。
    有关索引结构的详细信息,请参阅表和索引体系结构。聚集索引和非聚集索引都可以是唯一的。这意味着任何两行都不能有相同的索引键值。另外,索引也可以不是唯一的,即多行可以共享同一键值。有关详细信息,请参阅唯一索引设计指南。每当修改了表数据后,都会自动维护表或视图的索引。索引和约束
    对表列定义了 PRIMARY KEY 约束和 UNIQUE 约束时,会自动创建索引。例如,如果创建了表并将一个特定列标识为主键,则 数据库引擎自动对该列创建 PRIMARY KEY 约束和索引。有关详细信息,请参阅创建索引(数据库引擎)。查询优化器如何使用索引
    设计良好的索引可以减少磁盘 I/O 操作,并且消耗的系统资源也较少,从而可以提高查询性能。对于包含 SELECT、UPDATE、DELETE 或 MERGE 语句的各种查询,索引会很有用。例如,在 AdventureWorks 数据库中执行的查询 SELECT Title, HireDate FROM HumanResources.Employee WHERE EmployeeID = 250。执行此查询时,查询优化器评估可用于检索数据的每个方法,然后选择最有效的方法。可能采用的方法包括扫描表和扫描一个或多个索引(如果有)。扫描表时,查询优化器读取表中的所有行,并提取满足查询条件的行。扫描表会有许多磁盘 I/O 操作,并占用大量资源。但是,如果查询的结果集是占表中较高百分比的行,扫描表会是最为有效的方法。查询优化器使用索引时,搜索索引键列,查找到查询所需行的存储位置,然后从该位置提取匹配行。通常,搜索索引比搜索表要快很多,因为索引与表不同,一般每行包含的列非常少,且行遵循排序顺序。查询优化器在执行查询时通常会选择最有效的方法。但如果没有索引,则查询优化器必须扫描表。您的任务是设计并创建最适合您的环境的索引,以便查询优化器可以从多个有效的索引中选择。SQL Server 提供的数据库引擎优化顾问可以帮助分析数据库环境并选择适当的索引。
      

  2.   

    索引类型  说明  其他信息  
    聚集
     聚集索引基于聚集索引键按顺序排序和存储表或视图中的数据行。聚集索引按 B 树索引结构实现,B 树索引结构支持基于聚集索引键值对行进行快速检索。
     聚集索引设计指南 聚集索引结构 
     
    非聚集
     既可以使用聚集索引来为表或视图定义非聚集索引,也可以根据堆来定义非聚集索引。非聚集索引中的每个索引行都包含非聚集键值和行定位符。此定位符指向聚集索引或堆中包含该键值的数据行。索引中的行按索引键值的顺序存储,但是不保证数据行按任何特定顺序存储,除非对表创建聚集索引。
     非聚集索引设计指南 非聚集索引结构 
     
    唯一
     唯一索引确保索引键不包含重复的值,因此,表或视图中的每一行在某种程度上是唯一的。聚集索引和非聚集索引都可以是唯一索引。
     唯一索引设计指南 
     
    包含列索引
     一种非聚集索引,它扩展后不仅包含键列,还包含非键列。
     具有包含列的索引 
     
    索引视图
     视图的索引将具体化(执行)视图,并将结果集永久存储在唯一的聚集索引中,而且其存储方法与带聚集索引的表的存储方法相同。创建聚集索引后,可以为视图添加非聚集索引。
     设计索引视图 
     
    全文
     一种特殊类型的基于标记的功能性索引,由 Microsoft SQL Server 全文引擎生成和维护。用于帮助在字符串数据中搜索复杂的词。
     全文索引 
     
    空间
     利用空间索引,可以更高效地对 geometry 数据类型的列中的空间对象(空间数据)执行某些操作。空间索引可减少需要应用开销相对较大的空间操作的对象数。
     空间索引概述 
     
    筛选
     一种经过优化的非聚集索引,尤其适用于涵盖从定义完善的数据子集中选择数据的查询。筛选索引使用筛选谓词对表中的部分行进行索引。与全表索引相比,设计良好的筛选索引可以提高查询性能、减少索引维护开销并可降低索引存储开销。
     筛选索引设计准则 
     
    XML
     xml 数据类型列中 XML 二进制大型对象 (BLOB) 的已拆分持久表示形式。
     
      

  3.   

    实际问题一:
        “tb1”的“meterno”字段 和 “tb1”的 “alertcode”字段做个索引,应该怎样做?实际问题二:
         为“WarnUse”表做一个触发器,每当“WarnUse”表中有数据插入时,就执行一个插入过程insert into WarnCount('','','',''),应该怎么做呢?
      

  4.   

     1、为什么使用X?
     2、怎样使用X?
     3、使用X有什么好处?
      

  5.   


    能写一下么?实际问题一:
    “tb1”的“meterno”字段 和 “tb1”的 “alertcode”字段做个索引,应该怎样做?实际问题二:
    为“WarnUse”表做一个触发器,每当“WarnUse”表中有数据插入时,就执行一个插入过程insert into WarnCount('','','',''),应该怎么做呢?
      

  6.   


    go
    if object_id('tri_tracy')is not null
    drop trigger tri_tracy
    go
    create trigger tri_tracy on WarnUse
    for insert
    as
    if exists(select 1 from inserted)
       and not exists(select 1 from deleted)
    begin
    insert WarnCount
    select * from inserted
    end
      

  7.   


    use 你的表所在的数据库
    create clustered(表示聚集索引,索引的一种类型) index meterno_alertcode_index on tbl(meterno,alertcode)
    --这个仅仅是创建索引的语法,至于创建什么类型的索引需要根据你的实际情况确定
      

  8.   


    create nonclustered(表示非聚集索引,索引的一种类型) index meterno_alertcode_index on tbl(meterno,alertcode)索引的类型:
    nonclustered--非聚集索引
    clustered--聚集索引
    unique--唯一索引
      

  9.   

    谢谢您,创建这样的索引:create  nonclustered  index  MeterNo_AlarmCode_index  on  WarnUse(MeterNo,AlarmCode) 是不是可以加快“MeterNo”和“AlarmCode”之间的查询速度???
      

  10.   

    是不是可以将“索引”简单的理解为“表的目录”???比如“表Tb”,它有这几个字段“A、B、C、D、E”。如果把“A”和“D”创建为索引,是不是根据“A”和“D”进行查询的时候,查询速度就快了?
      

  11.   

    一、索引
    1.答:如果把表看做一本书,索引就好像书里的目录或者书签,能帮助你快速找到你要检索的内容,所以叫做索引。
    2.答:使用create index语句创建索引,可以简单的理解为在经常使用的关键词和谓词字段上使用索引。
    3.答:使用索引能提高查询的效率,基于时间的成本。create index idx_1 on tbl1(meterno);
    gocreate index idx_2 on tbl1(alertcode);
    go
    二、触发器
    1.答:触发器可以看成是用户自定义约束的一种补充,这种补充不管理论上还是实际生产中都比不可少,基本原理就是让某个事件触发一个数据库的操作。关于触发器的种类请参看联机丛书。
    2.答:使用create trigger语句创建触发器。
    3.答:使用触发器能完成一些使用通用的完整性约束无法完成的用户自定义约束。create trigger tr_1
        on WarnUse
        for insert
    as
    begin
        insert into WarnCount
        values('', '', '', '');
    end;
    go