zoukankan      html  css  js  c++  java
  • SQLServer之索引

      索引(Index)好比书的目录,当进行检索时不必扫描整个表,就可以迅速的找到表中的数据。

    书要制作目录可以方便查找,但也需要纸张来存储目录信息,如果增加或删除了书的内容,那么

    目录必定也要做修改,索引与之类似,可以快速检索,但也需要一定的内存开销以及维护开销。

      首先先解释下索引是如何快速找到数据的?

      索引是一个单独的、物理的分散存储数据库结构。它是针对一个表建立的,每个索引

    页面中的行都含有逻辑指针,指向数据库表中的物理位置。在进行检索的时候,总是先

    检索索引页,找到指向所需数据的指针,然后通过该指针找到数据页面读取数据,提高查询效率。

      建立索引页必然要占用一部分内存,同时增加、删除、修改的时候也要花费时间去维护索引,

    所以选择合适的列建立索引是很必要的。

      那么该选择怎样的列建立索引呢?

    1、主键列:存取最常用的列便是主键。

    2、外键列:外键通常要与其它表进行关联查询,将其设置为索引,可以更加快速的进行连接

    3、经常被作为条件检索的列和按排序频繁检索的列。

      选择好列还要遵循一定的建立索引原则,如下:

    1、数据量很少的表不要建立索引,因为数据太少,索引的效果不明显,还得花时间维护。

    2、对检索的字段有很多数据值或空值,为其建立索引,可以大大提高检索速度。

    3、在对表中的数据进行大量更新时最后先删除索引在更新,然后在建立索引。

    4、在模糊查询时尽量不要使用like '%某某%' ,而使用like '某%'

    5、少用全表索引

      知道原则了,那么开始建立索引了,一般索引分为聚集索引(簇索引)和非聚集索引(非簇索引),

    其建立都是用CREATE INDEX,指示建立聚集索引时要显示声明CLUSTERED。

    例如对StudentInfo表中的No列和Name列建立降序非聚集索引或聚集索引,可以这样写:

    CREATE [CLUSTERED] INDEX indexName_stuInfo ON StudentInfo(No,Name DESC)

    [CLUSTERED]表示可选,选择则建立聚集所以。

    注意:聚集索引一张表只能建一个,故在对一张表建立聚集索引前要先删除原来的聚集索引。

    如:IF EXISTS(SELECT NAME FROM SYS.INDEXES WHERE NAME ='indexName_stuInfo')

      DROP INDEX StudentInfo.indexName_stuInfo

      GO

      CREATE CLUSTERED INDEX indexName_stuInfo ON  StudentInfo(No,Name DESC)

      GO

     *******************************下回介绍维护索引******************************************** 

     

     

     

     

     

     

  • 相关阅读:
    python中进程池和回调函数
    python网络编程中互斥锁与进程之间的通信
    python支持的进程与线程
    python网络编程之进程
    python网络编程之粘包
    python中socket编程
    python的异常处理
    webstorm(四):webstrom配置一键修复ESLint的报错
    JavaScript Array map() 方法
    ES6之Array.includes()函数
  • 原文地址:https://www.cnblogs.com/willpan/p/index.html
Copyright © 2011-2022 走看看