zoukankan      html  css  js  c++  java
  • 索引

    1.复合索引有什么作用?

    1。你的索引这样创建
    create index yourindex on yourtable(id,name,city)
    2.当你在查询的时候
    select id,name,city
    from yourtable
    这时候查询优化器,不在扫描表了,而是直接的从索引中拿数据,因为索引中有这些数据,
    这叫覆盖式查询,这样的查询速度非常快。
    2. 用聚集索引、唯一值索引、不重新计算索引、文件组索引。到底哪个好些?

    在创建聚集索引之前,应先了解您的数据是如何被访问的。可考虑将聚集索引用于:

    包含大量非重复值的列。

    使用下列运算符返回一个范围值的查询:BETWEEN、>、>=、< 和 <=。

    被连续访问的列。

    返回大型结果集的查询。

    经常被使用联接或 GROUP BY 子句的查询访问的列;一般来说,这些是外键列。对 ORDER BY 或 GROUP BY 子句中指定的列进行索引,可以使 SQL Server 不必对数据进行排序,因为这些行已经排序。这样可以提高查询性能。

    OLTP 类型的应用程序,这些程序要求进行非常快速的单行查找(一般通过主键)。应在主键上创建聚集索引。


    聚集索引不适用于:

    频繁更改的列
    这将导致整行移动(因为 SQL Server 必须按物理顺序保留行中的数据值)。这一点要特别注意,因为在大数据量事务处理系统中数据是易失的。

    宽键
    来自聚集索引的键值由所有非聚集索引作为查找键使用,因此存储在每个非聚集索引的叶条目内。

    在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。

    在创建非聚集索引之前,应先了解您的数据是如何被访问的。可考虑将非聚集索引用于:

    包含大量非重复值的列,如姓氏和名字的组合(如果聚集索引用于其它列)。如果只有很少的非重复值,如只 有 1 和 0,则大多数查询将不使用索引,因为此时表扫描通常更有效。

    返回大型结果集的查询。

    返回精确匹配的查询的搜索条件(WHERE 子句)中经常使用的列。

    经常需要联接和分组的决策支持系统应用程序。应在联接和分组操作中使用的列上创建多个非聚集索引,在任何外键列上创建一个聚集索引。

    在特定的查询中覆盖一个表中的所有列。这将完全消除对表或聚集索引的访问。
    3. 总结要点:

    一个表可以有多个非聚集索引,但只能有一个聚集索引。

    如果该表上尚未创建聚集索引,且在创建 PRIMARY KEY 约束时未指定非聚集索引,

    PRIMARY KEY 约束会自动创建聚集索引

    4。例子:

    CREATE TABLE tbl_test (
    col_pk INT NOT NULL,
    col_1 TINYINT NOT NULL,
    col_2 SMALLINT NOT NULL,
    col_3 TINYINT NOT NULL,
    col_4 DATETIME NULL,
    col_5 DATETIME NULL
    );
    GO

    CREATE CLUSTERED INDEX idx_tbl_test_00
    ON tbl_test (
    col_4 ASC,
    col_5 ASC,
    col_1 ASC,
    col_2 ASC,
    col_3 ASC
    );
    GO

    CREATE NONCLUSTERED INDEX idx_tbl_test_01 ON tbl_test
    (
    col_1 ASC,
    col_2 ASC,
    col_3 ASC
    )
    GO

    ALTER TABLE tbl_test
    ADD CONSTRAINT pk_tbl_test PRIMARY KEY (
    col_pk
    );
    GO

    5。例子2

    --增加列
    alter table [TableName] add [P_ID] bigint not null default 0
    --删除列
    alter table [TableName] drop column [P_ID]
    --设置主键
    alter table [TableName] add constraint PK_TableName primary key (P_ID)
    --删除主键
    alter table [TableName] drop constraint PK_TableName
    --创建聚集索引(一个表中允许一个聚集索引)
    CREATE CLUSTERED INDEX [tTopIndex] ON [TableName] ([P_ID]) ON [PRIMARY]
    --创建非聚集索引
    CREATE INDEX [tTopIndex] ON TableName ([P_ID]) ON [PRIMARY]
    --删除索引
    drop index [TableName].[tTopIndex]
    --增加字段说明
    EXECUTE sp_addextendedproperty N'MS_Description', N'照片ID', N'user', N'dbo', N'table', N'TableName', N'column', N'P_ID'

  • 相关阅读:
    k8s1.13.0二进制部署-Dashboard和coredns(五)
    一、服务器简介
    Java检测端口的占用情况
    GreenMail邮件测试服务器
    PowerMock简单使用
    源码-集合:ArrayList
    Maven初步接触
    Java测试工具和框架
    Git初步
    java+搜索引擎
  • 原文地址:https://www.cnblogs.com/Eleanore/p/2690304.html
Copyright © 2011-2022 走看看