2008-08-04 55 views
47

希望我可以得到每个数据库服务器的答案。我如何索引数据库列

索引如何工作的轮廓检查:How does database indexing work?

+0

这似乎是一个问题,可以很好地回答您可能正在使用的数据库服务器的文档。对于Oracle:[http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/indexes003.htm](Oracle) – 2008-10-03 12:45:26

+0

当我单击上面的Oracle链接时,我没有得到正确的页面。发布正确的链接:http://docs.oracle.com/cd/B28359_01/server.111/b28310/indexes003.htm – 2013-07-08 03:19:44

回答

53

以下是SQL92标准等都应该受到广大使用SQL RDMBS的支持:

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

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

创建MY_TABLE非聚集索引my_idx(my_col1 ASC,ASC my_col2)包括(my_col3);

这是无价的,在选择列表my_col3查询,并my_col1和my_col2的where子句。

4

对于Python pytables,索引没有名字,他们必然要单独列:

tables.columns.column_name.createIndex() 
4

在SQL Server中,你可以做到以下几点:(MSDN Link到选项完整列表)

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

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

各指标的名称必须是唯一的数据库范围。

所有的索引可以有多个列,每列可以在任何你想要的顺序进行排序。

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

非聚集索引不是唯一的,并且最多可以有999元的表。他们可以包含列和where子句。

2

要创建下列东西指标可用于:

  1. 创建表上的索引。重复的值被允许:

    CREATE INDEX INDEX_NAME ON表名(列)

  2. 创建一个表上的唯一索引。重复值是不允许:

    CREATE UNIQUE INDEX INDEX_NAME ON表名(列)

  3. 聚集索引

    CREATE CLUSTERED INDEX CL_ID销售(ID);

  4. 非聚集索引

    CREATE NONCLUSTERED INDEX NONCI_PC销售(产品代码);

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

1

1.

CREATE INDEX name_index ON Employee (Employee_Name) 
  • 在多列

    CREATE INDEX name_index ON Employee (Employee_Name, Employee_Age) 
    
  • 0

    只应指数在其上执行频繁搜索的列/查询。

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

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

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

    CREATE INDEX IndexStudentID 
    
    ON Students (StudentID) 
    

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

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