Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
此语句用于在指定表中创建索引。
CREATE [ UNIQUE ] INDEX [ IF NOT EXISTS ] [ index-name ] ON table-name ( ordered-column-list ) [ WITH MAX HASH SIZE integer ]
ordered-column-list : ( column-name [ ASC | DESC ], ... )
UNIQUE UNIQUE 属性确保表中不会有两行的值在所有索引列中相同。每个索引键都必须是唯一的,或者至少在一列中包含 NULL。
表的唯一约束和唯一索引是有区别的。唯一索引的列可以为 NULL,而唯一约束的列不能为 NULL。外键可以引用主键或者唯一约束,但不能引用唯一索引,因为唯一索引可以包括多个 NULL 实例。
如果在更新过程中更改了唯一约束中的列,并且某个外键引用了该唯一约束,那么会从远程删除不再引用该唯一约束中的行的所有行。
IF NOT EXISTS 子句 指定 IF NOT EXISTS 属性且命名的索引已存在时,不会进行任何更改,也不会返回错误。
ordered-column-list 列的有序列表。索引中列的值可按升序或降序排列。
WITH MAX HASH SIZE 为此索引设置散列大小(按字节计)。该值替换对数据库有效的缺省 MaxHashSize 属性。UltraLite Java 版本数据库不支持此选项。 要了解缺省大小,请参见读取数据库属性。
UltraLite 自动创建主键和唯一约束的索引。
索引为 UltraLite 查找特定行提供了快捷的方法,因此提高了查询性能。相反,由于必须维护索引,所以索引可能降低同步以及 INSERT、DELETE 和 UPDATE 语句的速度。
此索引自动用于改进向数据库发出的查询的性能,以及通过 ORDER BY 子句对查询进行排序。索引一旦创建后就再也不能在 SQL 语句中再次引用,除非使用 DROP INDEX 将它删除。
索引会占用数据库中的空间。此外,维护索引需要的额外操作会影响数据修改操作的性能。由于这些原因,应避免创建不能提高查询性能的索引。
当 CREATE INDEX 语句正在被处理时,UltraLite 不会处理引用该索引的请求或查询。此外,当数据库包含活动查询或未提交的事务时,您也无法执行 CREATE INDEX 语句。
UltraLite 可向开发人员提供执行计划来优化查询。请参见UltraLite 中的执行计划。
对于 UltraLite.NET 用户:除非也为所有数据对象(例如 ULDataReader)调用了 Dispose 方法,否则您将无法执行此语句。请参见ULBulkCopy.Dispose 方法 [UltraLite.NET]。
如果模式更改同时开始,则语句将不会被释放。请参见UltraLite 数据库模式。
以下语句在 Employees 表上创建一个由两个列组成的索引。
CREATE INDEX employee_name_index ON Employees ( Surname, GivenName );
以下语句在 SalesOrderItems 表上为 ProductID 列创建索引。
CREATE INDEX item_prod ON SalesOrderItems ( ProductID );