如何索引数据库列

希望我能得到每个数据库服务器的答案。

For an outline of how indexing works check out: How does database indexing work?

0
额外 编辑
意见: 3
SO宣称的目标之一是首先在谷歌搜索中出现。很多时候,一个SO回答比文档本身更好。作为一个社区维基来整理所有答案,在这里设置一个答案是否有价值?
额外 作者 Ethan Reesor,
这似乎是一个问题,可以通过您可能使用的数据库服务器的文档很好地回答。对于Oracle: download.oracle。 COM /文档/ CD / B28359_01 / server.111 / b28310 /…
额外 作者 WW.,
当我点击上面的Oracle链接时,我没有得到正确的页面。发布正确的链接: docs.oracle.com/cd/B28359_01 /server.111/b28310/indexes003.ht‌米
额外 作者 Saurabh Patil,

7 答案

Sql Server 2005使您能够指定覆盖索引。这是一个包含来自叶级其他列的数据的索引,因此您不必返回表以获取未包含在索引键中的列。

在my_table上创建非聚簇索引my_idx(my_col1 asc,my_col2 asc)include(my_col3);

这对于在select列表中具有my_col3并且在where子句中具有my_col1和my_col2的查询是非常有用的。

0
额外

1。

 CREATE INDEX name_index ON Employee (Employee_Name)
  1. On a multi column

    CREATE INDEX name_index ON Employee (Employee_Name, Employee_Age)
    
0
额外

在SQL Server中,您可以执行以下操作:( to full选项列表)。

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name 
    ON  ( column [ ASC | DESC ] [ ,...n ] ) 
    [ INCLUDE ( column_name [ ,...n ] ) ]
    [ WHERE  ] 

(忽略一些更高级的选项......)

每个索引的名称必须是唯一的数据库范围。

所有索引都可以有多列,每列可以按照您想要的顺序排序。

聚簇索引是唯一的 - 每个表一个。他们不能有 INCLUDE d列。

非聚簇索引不是唯一的,每个表最多可以有999个。他们可以包含列和where子句。

0
额外

以下是SQL92标准,所以大部分使用SQL的RDMBS都应该支持这种标准:

CREATE INDEX [index name] ON [table name] ( [column name] )
0
额外
在大多数系统中,这也可以用于多列,只需添加逗号分隔的列名称列表而不是单列。
额外 作者 David Manheim,

对于python pytables,索引没有名称,它们绑定到单列:

tables.columns.column_name.createIndex()
0
额外

要创建索引,可以使用以下内容:

  1. Creates an index on a table. Duplicate values are allowed:

    CREATE INDEX index_name ON table_name (column_name)

  2. Creates a unique index on a table. Duplicate values are not allowed:

    CREATE UNIQUE INDEX index_name ON table_name (column_name)

  3. Clustered Index

    CREATE CLUSTERED INDEX CL_ID ON SALES(ID);

  4. Non-clustered index

    CREATE NONCLUSTERED INDEX NONCI_PC ON SALES(ProductCode);

请参阅 http://www.codeproject.com/Articles/190263/有关详细信息,请参阅MS-SQL-Server索引

0
额外

您应该只索引您经常执行搜索/查询的列。

假设您有一个名为Students的表格,您在其中存储了StudentID,Name,Course,Grade等。您需要经常搜索StudentID列以获取有关特定学生的信息。

SELECT Name, Course, Grade

FROM Students

WHERE StudentID = 111025

您应该在该列上创建索引,因为它会加快搜索过程。您可以使用以下代码在现有列上创建索引:

CREATE INDEX IndexStudentID

ON Students (StudentID)

名字IndexStudentID可以是任何东西,选择一些对你有意义的东西。

但是,创建索引会为数据库增加一些开销。有很多工具可以提供帮助,例如,我使用 SQLDbm ,因为它最适合我。

0
额外
不要忘记基数。 SHOW INDEX FROM schema.table; 在创建它们之后,请始终测试您的索引。此外,请尝试多列索引的基数(低到高)和(高到低)。关注基数可能会在大型数据库上节省大量时间。 - en.wikipedia.org/wiki/Cardinality_(SQL_statements)
额外 作者 JayRizzo,