【问题标题】:What is the SQL index name for?什么是 SQL 索引名称?
【发布时间】:2010-07-07 00:33:21
【问题描述】:

在 SQL 中,当我创建数据库索引时,我需要为索引命名,如

CREATE INDEX timestamp_index ON hit (timestamp);

这个名字似乎是唯一需要的时候是如果我想删除索引

DROP INDEX timestamp_index;

索引名称还有其他用途吗?

【问题讨论】:

标签: sql indexing


【解决方案1】:

这里有几点需要考虑:

你将如何重建索引?

您将如何对索引进行碎片整理/重组?

您将如何更改索引?

您将如何查看索引以了解其中包含哪些列?

在查看执行计划时,您如何知道使用了什么索引?

在执行 BULK INSERT/BCP 时如何禁用索引?

如果您不知道名称,您将如何使用sys.dm_db_missing_index_details DMV?

顺便说一句,当您创建 primary key 时,默认情况下会创建 clustered index,SQL Server 会为您命名

create table bla  (id int primary key)
go

select * from sys.sysobjects s 
join sys.sysobjects s2 on s.parent_obj = s2.id
where s2.name = 'bla'

这是为该索引生成的名称 PK__bla__3213E83F66603565

【讨论】:

  • 我现在实际上正在使用 SQLite,如果有兴趣的话。
【解决方案2】:

有时需要进行索引提示,即告诉查询引擎它应该使用什么索引。如果您的索引没有命名,则不能这样做。

【讨论】:

    【解决方案3】:
    ALTER INDEX timestamp_index ...
    

    T-SQL link

    【讨论】:

      【解决方案4】:

      您还会如何识别索引?

      可能还附加了日志记录。

      【讨论】:

      • 您将如何识别索引用于什么目的?如果只供数据库引擎内部使用,我不需要给它起名字。
      • 修改、删除、衡量效率
      【解决方案5】:

      在查看/检查执行计划时(至少在 SQL Server 中)也很有帮助,因为使用的索引按名称显示。

      【讨论】:

        【解决方案6】:

        我经常对文件名有同样的感觉。当文件的属性做得更好时,mp3 文件名是否需要包含元数据(艺术家、专辑、不是播客等)?我的 ipod 上的文件与我的硬盘驱动器上的相应文件名不同,因为它使用索引并且我不需要为 那个 索引想一个名称!

        与数据元素名称不同,索引的名称是任意的。理想的索引是由系统创建并永远“照顾”系统最了解的索引。可悲的是,现实情况是,在极少数情况下,您可能需要对它做一些事情(例如,放下它!)。您可以参考系统字典来根据其属性识别索引,通常只是它包含的列。

        【讨论】:

          猜你喜欢
          • 2017-05-25
          • 1970-01-01
          • 1970-01-01
          • 2017-09-27
          • 2011-02-26
          • 2015-03-16
          • 2013-02-17
          • 2015-02-03
          • 2015-03-09
          相关资源
          最近更新 更多