如何索引数据库列

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

有关如何检索索引的大纲,请参阅: 数据库索引如何工作?

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

CREATE INDEX [index name] ON [table name] ( [column name] ) 

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

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

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

对于python pytables,索引没有名字,并且绑定到单个列:

 tables.columns.column_name.createIndex() 

在SQL Server中,您可以执行以下操作:( MSDN链接到完整的选项列表。)

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

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

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

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

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

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

要创build索引以下的东西可以使用:

  1. 在表上创build一个索引。 允许重复的值:

    CREATE INDEX index_name ON table_name(column_name)

  2. 在表上创build唯一的索引。 不允许重复的值:

    CREATE UNIQUE INDEX index_name ON table_name(column_name)

  3. 聚集索引

    在销售(ID)上创buildCLUSTERED INDEX CL_ID;

  4. 非聚集索引

    在销售中创build非专有索引NONCI_PC(ProductCode);

详情请参考http://www.codeproject.com/Articles/190263/Indexes-in-MS-SQL-Server

1。

  CREATE INDEX name_index ON Employee (Employee_Name) 
  1. 在一个多列

     CREATE INDEX name_index ON Employee (Employee_Name, Employee_Age) 

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

假设你有一个名为Students的表格,你存储StudentID,Name,Course,Grade等等。你需要频繁地searchStudentID列以获得关于特定学生的信息。

 SELECT Name, Course, Grade FROM Students WHERE StudentID = 111025 

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

 CREATE INDEX IndexStudentID ON Students (StudentID) 

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

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