如何索引数据库列
希望我能得到每个数据库服务器的答案。
有关如何检索索引的大纲,请参阅: 数据库索引如何工作?
以下是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索引以下的东西可以使用:
-
在表上创build一个索引。 允许重复的值:
CREATE INDEX index_name ON table_name(column_name)
-
在表上创build唯一的索引。 不允许重复的值:
CREATE UNIQUE INDEX index_name ON table_name(column_name)
-
聚集索引
在销售(ID)上创buildCLUSTERED INDEX CL_ID;
-
非聚集索引
在销售中创build非专有索引NONCI_PC(ProductCode);
详情请参考http://www.codeproject.com/Articles/190263/Indexes-in-MS-SQL-Server 。
1。
CREATE INDEX name_index ON Employee (Employee_Name)
-
在一个多列
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 ,因为它最适合我。