远程Sybase数据库技术支持,联系手机:13811580958,QQ:289965371!

 

随着Sybase被完全整合到SAP下,Sybase原来的支持网站被SAP Support Portal取代。
只有购买了SAP服务的用户才能使用账号登录SAP Support Portal进行介质下载、补丁升级、报Incident等。
目前,原Sybase所有产品(包括:Adaptive Server Enterprise、Sybase IQ、Replication Server、PowerDesigner等)的官方手册仍然可以从http://infocenter.sybase.com/help/index.jsp进行浏览或下载。暂不清楚该网站http://infocenter.sybase.com/help/index.jsp何时会被完全迁移到SAP Support上!
Sybase官方手册英文版有html和pdf两种格式,而中文版手册只有pdf一种格式。为了国内Sybase用户更方便、快捷地搜索Sybase常见产品的官方手册内容,特将中文版Sybase官方手册转为html格式!
Sybase产品官方手册中文版的html格式所有内容的版权归SAP公司所有!本博客站长是Sybase数据库的铁杆粉丝!

如有Sybase数据库技术问题需要咨询,请联系我!

  QQ :289965371 点击这里给我发消息
  Email:

以下官方手册为ASE 15.7 ESD#2中文版:

  1. 新增功能公告 适用于 Windows、Linux 和 UNIX 的 Open Server 15.7 和 SDK 15.7
  2. 新增功能摘要
  3. 新增功能指南
  4. ASE 15.7 发行公告
  5. 配置指南(windows)
  6. 安装指南(windows)
  7. 参考手册:构件块
  8. 参考手册:命令
  9. 参考手册:过程
  10. 参考手册:表
  11. Transact-SQL® 用户指南
  12. 系统管理指南,卷 1
  13. 系统管理指南,卷 2
  14. 性能和调优系列:基础知识
  15. 性能和调优系列:锁定和并发控制
  16. 性能和调优系列:监控表
  17. 性能和调优系列:物理数据库调优
  18. 性能和调优系列:查询处理和抽象计划
  19. 性能和调优系列:使用 sp_sysmon 监控 Adaptive Server
  20. 性能和调优系列:利用统计分析改进性能
  21. 程序员参考 jConnect for JDBC 7.0.7
  22. Adaptive Server Enterprise 中的 Java
  23. 组件集成服务用户指南
  24. Ribo 用户指南
  25. 内存数据库用户指南
  26. Sybase Control Center for Adaptive Server® Enterprise
  27. 安全性管理指南
  28. 实用程序指南

 


< 上一个 | 内容 | 下一步 >

create index

说明 创建表中一个或多个计算列或非计算列的索引。创建分区索引。

允许将计算列像普通列一样用作索引键,并创建基于函数的索引。基于 函数的索引具有一个或多个用作索引键的表达式。

现有的 create index 语法可创建计算列的索引,但基于函数的索引需要额 外的语法。

语法 create [unique] [clustered | nonclustered] index index_name

on [[database.]owner.]table_name (column_expression [asc | desc]

[, column_expression [asc | desc]]...) [with {fillfactor = pct,

max_rows_per_page = num_rows, reservepagegap = num_pages,

consumers = x, ignore_dup_key, sorted_data, [ignore_dup_row | allow_dup_row],

statistics using num_steps values}] [on segment_name]

[index_partition_clause]

创建索引分区:

index_partition_clause::=

[local index [partition_name [on segment_name] [, partition_name [on segment_name]...]]]

对于基于函数的索引:

create [unique | nonclustered] index index_name on [[database.]owner.]table_name (column_expression [asc | desc]

[, column_expression [asc | desc]]...


参数 unique

禁止重复的索引值 (也称为 “键值”)。系统在创建索引 (如果数 据已经存在)以及每次用 insert update 添加数据时检查重复的键 值。如果有重复的键值或有多行包含空值,则此命令失败, Adaptive Server 输出一条错误消息并给出重复条目。


image

警告! 如果表包含任何非空 textunitext image 列,则 Adaptive Server

不检测重复行。

image


如果使用 allow_dup_row 选项创建索引,则生成重复键值的 update

insert 命令能够成功。

组合索引 (键值由多个列组成的索引)也可以唯一。

缺省值为非唯一。若要对包含重复行的表创建非唯一聚簇索引,请指 定 allow_dup_row ignore_dup_row 。请参见 143 页的 “重复行

在域、列表和散列分区表上创建唯一本地索引时,索引键列表是分区 键列表的超集。

clustered

意味着当前数据库设备上的行的物理顺序与这些行的索引顺序相同。 聚簇索引的底或叶级 包含实际的数据页。聚簇索引检索数据几乎总是 比非聚簇索引快。每个表只允许有一个聚簇索引。请参见 142 页的 “创建聚簇索引

如果未指定 clustered,则假定为 nonclusterednonclustered

意味着行的物理顺序与它们的索引顺序不同。非聚簇索引的叶级包含

指向数据页上的行的指针。每个表可以有多达 249 个非聚簇索引。

index_name

是索引的名称。索引名称在表内必须唯一,但在数据库内不需要唯一。

table_name 是索引的一个或多个列所在表的名称。如果该表位于另一数据库中, 请指定数据库名,如果数据库中有多个具有该名称的表,请指定所有 者的名称。 owner 的缺省值是当前用户,而 database 的缺省值是当前 数据库。


column_expression

是有效的 Transact-SQL 表达式,该表达式至少引用一个基列,并且不 包含来自其它表、局部和全局变量、集合函数或子查询的列。


image

注释 column_expressions 替换了 Adaptive Server 15.0 以前的版本中使用 的 column_name 变量。

image


asc | desc

指定以指定列的升序还是降序创建索引。缺省设置是按升序排列。

fillfactor

指定 Adaptive Server 对现有数据创建新索引时使每一页达到的填满程 度。 fillfactor 百分比仅在创建了索引后才有意义。随着数据的变化, 页不会保持在任何特定的填充程度。

指定的值不保存在 sysindexes 中。使用 sp_chgattribute 创建存储的

fillfactor 值。

fillfactor 的缺省值是 0;当您未在 create index 语句中包含 with fillfactor 时 使用此值 (除非已使用 sp_configure 更改了该值)。指定 fillfactor 时, 请使用介于 1 100 之间的值。

fillfactor 值为 0 可创建具有完全填充页的聚簇索引及具有完全填充叶页 的非聚簇索引。它在聚簇索引和非聚簇索引的索引 B 树内都保留适量 的空间。通常不需要更改 fillfactor

如果将 fillfactor 设置为 100Adaptive Server 在创建聚簇索引和非聚簇 索引时,会使每页的占满度达到 100%。将 fillfactor 的值设置为 100 仅 对只读表 (永不向其中添加数据的表)才有意义。

如果 fillfactor 的值小于 100 0 除外,值为 0 是一种特殊情况), Adaptive Server 创建新索引时就不会占满每一页。创建表的索引时, 如果表最终将包含大量数据,那么将 fillfactor 的值设置为 10 可能是一 种明智的选择,但较小的 fillfactor 值会导致每个索引 (或索引和数 据)占用较多的存储空间。


image

警告! 使用 fillfactor 创建聚簇索引会影响数据占用的存储空间,因为创 建聚簇索引时 Adaptive Server 会重新分配数据。

image


max_rows_per_page

限制数据页和索引的叶级页上的行数。与 fillfactor 不同,

max_rows_per_page 的值将保持不变,直到使用 sp_chgattribute 更改它。

如果不指定 max_rows_per_page 的值, Adaptive Server 将在创建表时 使用值 0。表和聚簇索引的值范围在 2K 页上为 0 183K,在 16K 页 上为 0 1486K

非聚簇索引的每页最大行数取决于索引键的大小。如果指定的值过 高, Adaptive Server 会返回错误消息。

max_rows_per_page 设置为 0 将创建具有充满的页的聚簇索引和具 有充满的叶页的非聚簇索引。它在聚簇索引和非聚簇索引的索引 B 树 内都保留适量的空间。

如果将 max_rows_per_page 设置为 1Adaptive Server 会创建叶级上为 每页一行的聚簇和非聚簇索引。使用低值可以减少经常访问的数据的 锁争用。然而, max_rows_per_page 值较低会导致 Adaptive Server 创 建具有并非完全填充的页的新索引,从而使用存储空间,并会导致更 多的页面拆分。

如果启用了 CIS,则不能对远程服务器使用 max_rows_per_page


image

警告! 使用 max_rows_per_page 创建聚簇索引会影响数据占用的存储空 间,因为创建聚簇索引时 Adaptive Server 会重新分配数据。

image


with reservepagegap = num_pages

指定填充页与空白页的比率,扩充 I/O 分配操作过程中要保留该比率 的空白页。对于每个指定的 num_pages,都会预留一个空白页供索引 将来扩展之用。有效值为 0 255。缺省值为 0

with consumers 指定应该为索引创建执行排序操作的消耗程序进程数。用于对索引排 序的实际消耗程序进程数可能与指定值不同,取决于可用的工作进程 数和数据分区数。

ignore_dup_key

取消试图将重复的键条目插入具有唯一索引 (聚簇或非聚簇)的表 中的操作。 Adaptive Server 取消重复键的试图的 insert update,并给 出信息性消息。取消之后,包含重复键的事务继续进行直到完成。

无论 ignore_dup_key 设置与否,都不能在已包含重复值或多个空值的 列上创建唯一索引。如果试图这样做, Adaptive Server 会显示含有第 一个重复值的错误消息。 Adaptive Server 在列上创建唯一索引之前, 必须消除重复值。


ignore_dup_row 允许在包含重复行的表上创建一个新的非唯一聚簇索引。 ignore_dup_row 从表中删除重复行,并取消任何会创建重复行的 insert updat e ,但不回退整个事务。请参见 143 页的 “重复行

allow_dup_row 允许在包含重复行的表上创建一个非唯一聚簇索引,并允许用 update insert 语句复制行。请参见 143 页的 “重复行

sorted_data 如果表中的数据已经是排序顺序,则将加速聚簇索引或唯一非聚簇索 引的创建 (例如,当使用 bcp 命令将已排序的数据复制到一个空表中 时)。请参见 145 页的 “使用 sorted_data 选项加速排序

with statistics using num_steps values

指定为用于优化查询的直方图生成的梯级数。如果忽略该子句:

如果当前没有存储前导索引列的直方图,则缺省值为 20

如果索引列的前导列的直方图已存在,则使用当前的梯级数。

如果指定 num_steps 0,则重新创建索引,但不会覆盖系统表中该 索引的统计信息。

实际梯级数可能与您指定的梯级数不同;如果用 num_steps 指定的直 方图梯级数为 Mhistogram_tuning_factor 参数为 N,则实际梯级数介 于 M M*N 之间,具体取决于分布中存在的频率单元数。

on segment_name

在已命名段上创建索引。在使用 on segment_name 选项之前,请用 disk init 初始化设备,然后用 sp_addsegment 将段添加到数据库。要生 成数据库中可用段名的列表,请咨询系统管理员或使用 sp_helpsegment。可在两个位置使用 on segment_name

紧邻 index_partition_clause 之前 – 定义全局缺省值,该值将用于 未在 index_partition_clause 中显式定义段的所有分区。

内置于该子句本身 – 允许您为每个单个分区指定段 有关在上述两个位置使用 on segment_name 的示例,请参见示例部分。

本地索引

对于语义分区表,指定一个始终与其基表均分的索引,即表和索引享 有相同的分区键和分区标准。对于循环分区表,本地索引表示表的每 个索引分区中的索引键引用一个且仅引用一个表分区中的数据行。

对于语义分区表和循环分区表,每个表分区都只有一个对应的索引分 区。


partition_name 指定要在其中存储索引的新分区的名称。分区名称在表或索引上的分 区组内必须唯一。如果使用 set quoted_identifier on,则分区名称可以 是分隔标识符。否则,分区名称必须是有效的标识符。

如果省略 partition_nameAdaptive Server 将创建一个格式为 table_name_partition_id 的名称。 Adaptive Server 将截断超过允许的最 大长度的分区名称。

示例 示例 1 authors 表的 au_id 列创建名为 au_id_ind 的索引:

create index au_id_ind on authors (au_id)

示例 2 authors 表的 au_id 列创建名为 au_id_ind 的唯一聚簇索引:

create unique clustered index au_id_ind on authors (au_id)

示例 3 titleauthor 表的 au_id title_id 列创建名为 ind1 的索引:

create index ind1 on titleauthor (au_id, title_id)

示例 4 authors 表的 zip 列创建名为 zip_ind 的非聚簇索引,将每个索引 页填满四分之一并将排序可以使用的消耗程序进程数限制为 4

create nonclustered index zip_ind on authors (postalcode)

with fillfactor = 25, consumers = 4

示例 5 创建 pub_id 以升序排列而 pubdate 以降序排列的索引:

create index pub_dates_ix

on titles (pub_id asc, pubdate desc)

示例 6 创建 title_id 的索引,为优化程序统计信息使用 50 个直方图梯级, 并在索引中为每 40 页留 1 个空白页:

create index title_id_ix on titles(title_id)

with reservepagegap = 40, statistics using 50 values

示例 7 在已分区的 salesdetail 表上创建本地聚簇索引。clust_idx 索引继承

salesdetail 的分区策略、分区键和分区界限。

create clustered index clust_idx

on salesdetail (ord_num) local index

示例 8 在已通过 date 列按范围分区的 sales 表上,创建非分区的、非聚簇 全局索引。

create nonclustered index global_idx



use tempdb go

on sales (order_num)

示例 9 首先,创建一个具有三个数据分区的表 pback_sales

create table pback_sales (c1 int, c2 int, c3 varchar (20)) partition range (c1)

(p1 c1 values <= (10), p2 c1 values <= (20), p3 c1 values <= (MAX))

然后,在分区 p1 上创建一个基于函数的本地索引:

create index fc_idx on pback_sales (c1*c2) local index p1

示例 10 创建基于函数的索引:

create index sum_sales on mytitles (price * total_sales)

示例 11 在分区名称之前和之后均指定 on segment_name 子句:

if not exists(select 1 from tempdb..syssegments where name = 'seg1') exec sp_addsegment seg1,tempdb,master

go

if not exists(select 1 from tempdb..syssegments where name = 'seg2') exec sp_addsegment seg2,tempdb,master

go

if not exists(select 1 from tempdb..syssegments where name = 'seg3') exec sp_addsegment seg3,tempdb,master

go

if not exists(select 1 from tempdb..syssegments where name = 'seg4') exec sp_addsegment seg4,tempdb,master

go

if exists(select 1 from sysobjects where name = 't1') drop table t1

go

create table t1 (a int, b varchar(30)) partition by roundrobin (p1 on seg1, p2 on seg2) go

create index t1_i1 on t1 (a) local index go

create index t1_i2 on t1 (a) on seg3 local index ip1 on seg4 go

sp_help t1 go

输出以下内容:

Name Owner Object_type Create_date

---- ----- ----------- -------------------

t1 dbo user table Aug 7 2008 11:14AM


(1 row affected)

Column_name Type Length Prec Scale Nulls Default_name Rule_name Access_Rule_name Computed_Column_object Identity

----------- ------- ------ ---- ----- ----- ------------ ---------

a

int

4 NULL

NULL

0 NULL

NULL

NULL

NULL

0

b

varchar

30 NULL

NULL

0 NULL

NULL

NULL

NULL

0

a

int

4 NULL

NULL

0 NULL

NULL

NULL

NULL

0

b

varchar

30 NULL

NULL

0 NULL

NULL

NULL

NULL

0

---------------- ---------------------- ----------


Object has the following indexes


index_name index_keys index_description index_max_rows_per_page index_fillfactor index_reservepagegap index_created index_local

---------- ---------- ----------------- -----------------------

---------------- -------------------- ------------------- -----------

t1_i1

a

nonclustered

0

0

0 Aug

7 2008 11:14AM Local Index

t1_i2

a

nonclustered

0

0

0 Aug

7 2008 11:14AM Local Index

(2 rows affected) index_ptn_name index_ptn_seg

---------------- -------------

t1_i1_952063116 default t1_i1_968063173 default ip1 seg4

t1_i2_1000063287 seg3


(4 rows affected)

No defined keys for this object.

name type partition_type partitions partition_keys

---- ---------- -------------- ---------- --------------

t1 base table roundrobin 2 NULL (1 row affected)

partition_name partition_id pages row_count segment create_date

-------------- ------------ ----- --------- ------- -------------------

p1

920063002

1

0 seg1

Aug 7 2008 11:14AM

p2

936063059

1

0 seg2

Aug 7 2008 11:14AM

Partition_Conditions

-------------------- NULL


Avg_pages Max_pages Min_pages Ratio(Max/Avg) Ratio(Min/Avg)

----------- ----------- ----------- -------------- ---------------- 1 1 1 1.000000 1.000000

Lock scheme Allpages

The attribute 'exp_row_size' is not applicable to tables with allpages lock scheme. The attribute 'concurrency_opt_threshold' is not applicable to tables with


allpages lock scheme.


exp_row_size reservepagegap fillfactor max_rows_per_page identity_gap ascinserts

------------ -------------- ---------- ----------------- ------------ ----------- 0 0 0 0 0 0


(1 row affected)

concurrency_opt_threshold optimistic_index_lock dealloc_first_txtpg

------------------------- --------------------- ------------------- 0 0 0


(1 row affected) (return status = 0)

用法 如果向更改索引中键的分布的表中添加数据,请定期运行 update statistics。查询优化程序使用由 update statistics 创建的信息选择在表 上运行查询的最佳计划。

如果创建非聚簇索引时表包含数据,则 Adaptive Server runs 在新索 引上运行 update statistics 。如果创建聚簇索引时表包含数据,则 Adaptive Server 对所有表的索引运行 update statistics

索引在连接中经常使用的所有列。

如果启用了 CIS,则重新构建 create index 命令,并直接将其传递给 与表相关联的 Adaptive Server

您不能在包括虚拟散列表的段上使用 create index (聚簇或非聚 簇),因为虚拟散列表必须仅采用一个排它段,而排它段是不能被 其它表或数据库共享的。

writetext 可与 online 参数同时运行。

创建索引和存储过程

Adaptive Server 在执行完 create index 语句后自动重新编译存储过程。虽 然在执行 create index 之前开始的即席查询继续起作用,但它们不利用新 索引。

Adaptive Server 12.5 版本和更早版本中,高速缓存的存储过程忽略

create index

有效地创建索引

索引加速数据检索,但会减慢数据更新。当段在独立的物理设备上 时,为了获得更好的性能,可以在一个段上创建表,并在另一个段 上创建其非聚簇索引。

如果表已分区且服务器配置为并行,则 Adaptive Server 可以并行创建 索引。还可以使用排序缓冲区以减少排序期间需要的 I/O 量。请参见

《性能和调优指南:优化程序和抽象计划》中的 “并行排序”。


应在创建任何非聚簇索引之前创建聚簇索引,因为在聚簇索引创建 之后非聚簇索引会自动重建。

对仅数据锁定表使用并行排序时,工作进程数必须等于或大于分区 数 (即使对空表也是如此)。还必须启用数据库选项 sele ct into/bulkcopy/pllsort

创建聚簇索引

表 “跟随”其聚簇索引。创建表时,如果用 on segment_name 扩展

create clustered index,表将迁移到创建索引的段上。

如果在特定段上创建表,然后在不指定段的情况下创建聚簇索引,

Adaptive Server 创建聚簇索引时会将表转到缺省的段上。

因为 textunitext image 数据存储在单独页链中,所以用 on

segment_name 创建聚簇索引不会移动文本和图像列。

为创建聚簇索引, Adaptive Server 复制现有数据,索引创建完成后 服务器删除原始数据。在创建聚簇索引之前,请使用 sp_spaceused 确保数据库至少有 120% 表大小的可用空间。

聚簇索引常根据表的主键 (唯一标识行的一列或多列)来创建。可 以用 sp_primarykey 将主键记录在数据库中 (以供前端程序和 sp_depends 使用)。

若要允许在聚簇索引中有重复行,请指定 allow_dup_row

创建压缩表上的索引

如果表需要排序, Adaptive Server 会在数据复制操作期间压缩所有 可供压缩的行。

如果您使用 sorted_data 创建聚簇索引, Adaptive Server 不会执行数 据复制,而且在构建聚簇索引时不压缩任何数据行。

• Adaptive Server 不压缩索引键值:它仅压缩数据行中的值。

您可以选择索引键列并创建唯一索引,即使键列被压缩也是如此。 要执行非聚簇唯一性检查,请检查索引页中的非压缩索引键。

• Adaptive Server 使用非压缩索引键和行格式来验证是否支持

ignore_dup_keyignore_dup_row allow_dup_row

• Adaptive Server 仅将 fillfactor 参数应用于行级压缩。

fillfactor 参数应用于所有页锁定聚簇索引的数据页时, Adaptive Server 会考虑:

最终压缩行格式

压缩所需的空间


Adaptive Server 可能会额外压缩后续页压缩操作所使用的页空间, 从而导致 fillfactor 值降低。

• Adaptive Server 在页级应用 respagegap 参数,以使其不受压缩影响。

max_rows_per_page 仅包括页的数据行,不包括隐藏的页字典、索引 和字符编码条目。

创建加密列的索引

如果指定加密密钥而未使用任何初始化矢量或随机填充,则可以创建加 密列的索引。在对数据进行等于和不等于匹配时,加密列的索引将非常 有用,但它不能用于匹配不区分大小写的数据或任何数据的范围搜索。

若要改进等于和不等于搜索以及连接的性能,可以创建加密列的索引。 如果您执行以下操作,

create index 将报告错误:

使用引用加密列的表达式创建函数索引

image

image

在用初始化矢量或随机填充加密的列中创建索引 注释 不能在函数索引表达式中使用加密列。

指定索引是按升序还是按降序排列

在索引列名称之后用 asc desc 关键字指定索引键的排列顺序。通过创 建索引使列按查询的 order by 子句中指定的相同顺序排列,在查询处理 过程中便不需要执行排序步骤。请参见 《性能和调优指南:锁定》中 的 “为改善性能建立索引”。

索引的空间要求

分配给表和索引的空间增量为一次 1 个扩充,或 8 页。每当一个扩 充填满后,就会分配另一个扩充。使用 sp_spaceused 显示索引分配 的和使用的空间量。

在某些情况下,使用 sorted_data 选项允许 Adaptive Server 跳过复制 数据行,如 145 页的表 1-6 中所述。在这种情况下,只需要索引 结构自身的足够的额外空间。根据键大小的不同而不同,这通常占 表大小的 20%

重复行

创建非唯一的非聚簇索引时, ignore_dup_row allow_dup_row 选项 是不相关的。 Adaptive Server 在每个非聚簇索引内部附加了一个唯 一的行标识号,所以即使相同的数据值也不会出现重复行。

ignore_dup_row allow_dup_row 相互排斥。


在所有页锁定表中,非唯一聚簇索引允许采用重复键,但不允许采 用重复行,除非指定 allow_dup_row 。该行为对于仅数据锁定表是不 同的, 1-4 对此进行了详细描述。

allow_dup_row 允许在包含重复行的表上创建非唯一的聚簇索引。如 果不使用 allow_dup_row 选项创建了表的非唯一的聚簇索引,则不能 使用 insert update 命令创建新的重复行。

如果表中存在具有唯一性的索引,则唯一性的要求优先于 allow_dup_row 选项。如果表中的任何列上存在唯一索引,则不能使 用 allow_dup_row 创建索引。

ignore_dup_row 选项还可与非唯一的聚簇索引一起使用。 ignore_dup_row 选项可消除批处理数据中的重复项。 ignore_dup_row 会取消可能创建重复行的任何 insert update ,但不回退整个事务。

1-4 说明 allow_dup_row ignore_dup_row 如何影响创建表 (包含 重复行)的非唯一聚簇索引以及向表中输入重复行的尝试。

1-4: 非唯一聚簇索引的重复行选项

设置选项

在有重复行的表上创建索引

向有索引的表中插入重复行

未设置选项

create index 失败。

insert 失败。

设置 allow_dup_row

create index 完成。

insert 完成。

设置

ignore_dup_row

创建索引,但删除重复行;错误消息。

插入重复行之外的所有行;错误消息。


1-5 说明了不同类型的索引可使用哪些索引选项:

1-5: 索引选项

image

索引类型 选项

聚簇 ignore_dup_row | allow_dup_row

唯一,聚簇 ignore_dup_key

非聚簇索引 否

唯一,非聚簇 ignore_dup_key


使用唯一约束代替索引

作为 create index 的一种替代方法,可以通过用 create table alter table 语句指定唯一约束隐式地创建唯一索引。唯一约束在表的列上 创建聚簇或非聚簇索引。这些隐式 索引在约束之后命名,且它们遵 循与用 create index 创建的索引相同的规则。

不能用 drop index 语句删除支持唯一约束的索引。它们在使用 alter table 语句删除约束时或删除表时被删除。有关唯一约束的详细信 息,请参见 create table


使用 sorted_data 选项加速排序

在某些情况下,通过跳过排序步骤和消除将数据行复制到新页的需 要, sorted_data 选项可以减少创建索引所需的时间。对大型表操作时 速度的提高尤其明显,对 1GB 以上的表操作时,速度将成倍提高。

如果指定 sorted_data,但数据未按排序顺序排列, Adaptive Server

将显示错误消息,该命令失败。

在创建非唯一的非聚簇索引时,除非没有任何一行有重复键才会成 功。如果有若干行有重复键, Adaptive Server 会显示出错信息,命 令失败。

sorted_data 对创建聚簇索引的影响取决于表是否已分区以及是否在 create index 命令中使用了某些其它选项。若使用了某些选项,则对 未分区表需要数据复制;对已分区表需要排序加数据复制;而其它 选项仅在下列情况下需要数据复制:

使用 ignore_dup_row 选项

使用 fillfactor 选项

使用 on segmentname 子句指定与表数据所在段不同的段

使用 max_rows_per_page 子句指定一个与表相关联的值不同的值

1-6 显示何时需要排序,何时要为分区表和未分区表复制表。

1-6: 使用 sorted_data 选项创建聚簇索引

选项

分区表

未分区表

未指定选项

只有在循环分区表上创建聚簇索引时

并行或非并行排序;复制数

才需要并行排序;复制数据,在分区

据,创建索引树。

上均匀分配数据;创建索引树。

仅指定 with sorted_data with

只创建索引树。不执行排序或复制数

只创建索引树。不执行排序

sorted_data on same_segment

据。不并行运行。

或复制数据。不并行运行。

with sorted_data ignore_dup_row

并行排序;复制数据,在分区上均匀

复制数据并创建索引树。不

fillfactor on other_segment

分配;创建索引树。

执行排序。不并行运行。

max_rows_per_page


指定直方图梯级数

使用 with statistics 子句为索引的前导列指定直方图梯级数。直方图 在查询优化程序为一个列确定与搜索参数相匹配的行数期间使用。

要重新创建索引而不更新列在 sysstatistics 中的值,请让梯级数为

0。这样可以避免覆盖已经用 optdiag 更改了的统计信息。


如果指定了具有某个值的 histogram_tuning_factor 参数,则 create index 使用 20 M*20 之间的任何梯级数,具体取决于已隔离的频率单元 数。缺省值为 20,但是可以使用 using step values 选项指定其它值。

空间管理属性

fillfactormax_rows_per_page reservepagegap 以不同的方式帮助管 理索引页上的空间:

fillfactor 适用于所有锁定方案的索引。对于所有页锁定表上的聚簇 索引,它影响表的数据页。在其它索引上,它影响索引的叶级。

max_rows_per_page 只适用于所有页锁定表的索引页。

reservepagegap 适用于所有锁定方案的表和索引。

reservepagegap 在以下情况下影响索引中的空间使用:

创建索引时。

在索引上执行 reorg 命令时。

在创建聚簇索引之后重建非聚簇索引时。

如果在 create clustered index 命令中指定了 reservepagegap 值,则它 适用于:

所有页锁定表的数据和索引页

DOL 锁定表的索引页

num_pages 值指定索引的叶级上的填充页与空白页的比率,因此当 需要新空间时,索引可以分配接近于现有页的空间。例如,值为 10 reservepagegap 为每 9 个使用的页保留 1 个空白页。

在所有页锁定表上与 create clustered index 一起指定的 reservepagegap

将覆盖以前用 create table alter table 指定的任何值。

可以用 sp_chgattribute 更改索引的空间管理属性。用 sp_chgattribute 更改属性不会立即影响表上索引的存储。将来进行大量分配时 (如 reorg rebuild),请使用 sp_chgattribute 值。

sp_chgattribute 设置的 fillfactor 值存储在 sysindexes 中的 fill_factor 列 中。当 alter table...lock 命令或 reorg rebuild 命令导致重新创建索引时, 将应用 fillfactor

索引选项和锁定方式

1-7 显示了所有页锁定表和仅数据锁定表支持的索引选项。在仅数据 锁定表上,在 create index 期间,将强制执行 ignore_dup_row allow_dup_row 选项,但在 insert update 操作期间,则不会强制执行。 仅数据锁定表始终允许插入重复行。


1-7: 创建锁定方案支持的索引选项

索引类型

所有页锁定表

DOL 锁定表

在索引创建期间

在插入期间

聚簇

allow_dup_rowignore_dup_row

allow_dup_rowignore_dup_row

allow_dup_row

唯一聚簇索引

ignore_dup_key

ignore_dup_key

ignore_dup_key

非聚簇索引

唯一非聚簇索引

ignore_dup_key

ignore_dup_key

ignore_dup_key


1-8 显示尝试向带有聚簇索引的表中插入重复行的命令行为,以及何 时删除和重新创建聚簇索引。

1-8: 重复行选项的强制实施和错误

选项

所有页锁定表

DOL 锁定表

未指定选项

插入失败,错误消息是 2615。重新创建索 引成功。

插入成功。重新创建索引失败,错误 消息是 1508

allow_dup_row

插入并重新创建索引成功。

插入并重新创建索引成功。

ignore_dup_row

插入失败,错误消息是 “重复行被忽略” (Duplicate row was ignored)。重新创建索引 成功。

插入成功。重新创建索引删除重复 行。


对仅数据锁定表使用 sorted_data 选项

只能在批量复制到空表操作后立即使用 sorted_data 选项来 create index。对表的数据修改导致了额外的页分配时,不能使用 sorted_data 选项。

为空间管理属性指定不同的值可能会替换 sorted_data 的禁止排序功 能。

获取有关表和索引的信息

每个索引 – 包括组合索引 – 在 sysindexes 中用一行表示。

有关通过索引检索数据的顺序和 Adaptive Server 安装的排序顺序影 响的信息,请参见 order by 子句

有关表的索引的信息,请执行 sp_helpindex。有关索引分区的信息, 还可以执行 sp_helpartitions

每个索引分区和数据分区在 syspartitions 中用一行表示。

创建计算列的索引

可以使用实现计算列作为索引键,就像它们是常规列一样。

若要将虚拟列转换为实现列并建立该列的索引,请在执行 create index 前使用 alter table modify materialized 选项。


计算列无需是确定性的即可用作索引键;然而,必须小心非确定性 列对引用它的查询的影响。

创建分区索引

本地索引从基表继承分区策略、分区列和分区界限 (对于域分区和 列表分区)。

• Adaptive Server 维护本地索引,并在用不同分区键对基表重新分区 后重建本地索引。

• Adaptive Server 支持:

image

索引类型 表类型

本地聚簇和非聚簇分区索引 分区表

全局、聚簇、未分区索引 循环分区表

全局、非聚簇、未分区索引 所有分区表


对于域、散列和列表分区表,聚簇索引始终是本地索引。无论语法 中是否包含“local index”,Adaptive Server 都将创建本地聚簇索引。

创建基于函数的索引

可以直接对表达式创建索引。

表达式必须是确定性的。

由于 Adaptive Server 不检验表达式索引键的确定性属性,所以用户 必须手动维护该属性。更改此属性可能导致意外结果。

由于基于函数的索引键必须具有确定性,所以其结果已预先求值, 可重复使用而无需重新求值。 Adaptive Server 假设所有基于函数的 索引键都是确定性的,并在查询中引用时使用对它们预先求值得到 的值;仅当其基列值发生更改时才对它们重新求值。

一个索引可以有多个基于函数的索引键或一个基于函数的索引键与 常规列的组合。

用作索引键的表达式必须是确定性的。表达式键不同于计算列索引 键,后者只需求值一次,并且不需要确定性属性。而表达式在指定 查询中每次出现时都必须重新求值,并且必须始终返回相同的结果。

如果基于函数的索引所引用的用户定义函数被删除或无效,调用该 函数的任何操作都会失败。

• Adaptive Server 不支持基于函数的聚簇索引。

不能使用 sorted_data 选项创建基于函数的索引。

创建表达式的索引键后,仅当该表达式与用于创建索引键的表达式 完全相同时,后续查询才会将该表达式视为索引键。


对基列执行任何 insertdelete update 操作都会导致 Adaptive Server 自动更新基于函数的索引键值。

标准 符合 ANSI SQL 的级别Transact-SQL 扩展。

权限 create index 的权限检查因您的细化权限设置而异。

image

细化权限已启用 在启用细化权限的情况下,您必须是表所有者或具有 create any index 特权的用户。 细化权限已禁用 在禁用细化权限的情况下,您必须是表所有者或具有 sa_role 的用户。

create index 权限缺省情况下授予表所有者,并且不能移交。


审计 sysaudits event extrainfo 列中的值如下:


事件

审计选项

审计的命令或访问权限

extrainfo 中的信息

104

create

create index

角色 - 当前活动角色

关键字或选项 NULL

先前值 NULL

当前值 NULL

其它信息 – 索引名称

代理信息 - set proxy 有效时的初始登录名

另请参见 命令 alter table, create table, drop index, insert, order by 子句 , set, update.

系统过程 sp_addsegment, sp_chgattribute, sp_helpcomputedcolumn, sp_helpindex, sp_helpsegment, sp_spaceused.

实用程序 optdiag .




--------------------------------------华丽的分割线-------------------------------------------------------------------------
之前就已经研发成功了能够从Sybase SQL Anywhere的DB文件中恢复数据的工具:ReadASADB。
此工具支持ASA v5.0,v6.0,v7.0,v8.0,v9.0,v10.0,v11.0,v12.0等版本。
恢复Sybase SQL Anywhere的工具在国内应该算首创。

ReadASADB功能
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具

  1. 适用于所有的SQL Anywhere版本    包括:5.x,6.x,7.x,8.x,9.x,10.x,11.x,12.x
  2. 适用于所有的UltraLite版本
  3. 能够恢复出来表结构和数据
  4. 能够恢复自定义数据类型
  5. 能够恢复存储过程等对象的语法
  6. 能够导出到目标数据库
  7. 能够导出到SQL文件并生成导入脚本
  8. 支持多种字符集  包括:cp850、cp936、gb18030、utf8等
  9. 能够恢复未加密或者简单加密类型的数据
  10. 简单易用
  11. 限制:不支持AES加密的数据文件
请参考:研发成功了从Sybase SQL Anywhere的DB文件上恢复数据的工具
            SQL Anywhere数据库非常规恢复工具ReadASADB使用介绍

ReadASADB适用场景

各种误操作:

  1. 误截断表(truncate table)
  2. 误删除表(drop table)
  3. 错误的where条件误删数据
  4. 误删除db或log文件
  5. 误删除表中的字段

本工具的应用场景:

1.因为物理磁盘故障、操作系统、系统软件方面或者掉电等等原因导致的Sybase SQL Anywhere数据库无法打开的情况;
2.误操作,包括truncate table,drop table,不正确的where条件导致的误删除等;
Sybase SQL Anywhere无法打开时,比较常见的错误是:Assertion failed。
如:
1、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Checkpoint log: invalid bitmap page -- transaction rolled back
2、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Page number on page does not match page requested -- transaction rolled back
3、Internal database error *** ERROR *** Assertion failed:200502 (9.0.2.2451) Checksum failure on page 23 -- transaction rolled back
4、File is shorter than expected
5、Internal database error *** ERROR *** Assertion failed: 201116 Invalid free list index page found while processing checkpoint log -- transaction rolled back
6、*** ERROR *** Assertion failed: 51901 Page for requested record not a table page or record not present on page等等。
+-------------------------------------华丽的分割线-------------------------------------------------------------------------