提供7*24专业Sybase数据库远程及现场技术支持,Sybase ASE及Sybase SQL Anywhere数据库修复服务,
请联系电话: (微信),QQ: 289965371!
We supply technical support for Sybase ASE and Sybase SQL Anywhere, also have many years of experience in recovering data from damanged Sybase devices.
Please contact us:
Phone:
Wechat: 13811580958
QQ: 289965371 联系我们获取数据库技术支持!
Email: 289965371@qq.com
扫描下方微信,联系我们:
扫描雨翰数据恢复官方微信获取专业数据库恢复服务

 

随着Sybase被完全整合到SAP下,Sybase原来的支持网站被SAP Support Portal取代。
只有购买了SAP服务的用户才能使用账号登录SAP Support Portal进行介质下载、补丁升级、报Incident等。
目前,原Sybase所有产品(包括:Adaptive Server Enterprise、Sybase IQ、Replication Server、PowerDesigner等)的官方手册仍然可以从https://infocenter.sybase.com/help/index.jsp进行浏览或下载。暂不清楚该网站https://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

警告! 如果表包含任何非空 text、unitext 或 image 列,则 Adaptive Server

不检测重复行。

image


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

insert 命令能够成功。

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

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

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

clustered

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

如果未指定 clustered,则假定为 nonclustered。 nonclustered

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

指向数据页上的行的指针。每个表可以有多达 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 设置为 100,Adaptive 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 设置为 1,Adaptive 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 指定的直 方图梯级数为 M,histogram_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_name, Adaptive 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 创建聚簇索引时会将表转到缺省的段上。

因为 text、 unitext 和 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_key、 ignore_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 选项指定其它值。

空间管理属性

• fillfactor、 max_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_row、 ignore_dup_row

allow_dup_row、 ignore_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 选项创建基于函数的索引。

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


• 对基列执行任何 insert、 delete 和 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数据库恢复工具ReadASADB:

之前就已经研发成功了能够从Sybase SQL Anywhere的DB文件中恢复数据的工具: ReadASADB。
此工具支持ASA v5.0, v6.0, v7.0, v8.0, v9.0, v10.0, v11.0, v12.0, v16.0, v17.0等版本。
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具。
恢复Sybase SQL Anywhere的工具在国内处于领先水平。

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,16.x,17.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使用介绍

Sybase SQL Anywhere数据库恢复工具ReadASADB适用场景

各种误操作:

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

Sybase SQL Anywhere数据库恢复工具ReadASADB的应用场景:

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
7、*** ERROR *** Assertion failed: 201417 (7.0.4.3541) Invalid count or free space offset detected on a table page
8、Internal database error *** ERROR *** Assertion failed: 201425 (8.0.3.5594) Invalid count or free space offset detected on a free list page -- transaction rolled back.
9、Internal database error *** ERROR *** Assertion failed: 100702 (8.0.1.2600) Unable to modify indexes for a row referenced in rollback log -- transaction rolled back


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

Sybase ASE数据库恢复工具READSYBDEVICE:

一个不依赖数据库管理系统、直接从Sybase数据库设备文件上提取数据的业内领先的恢复工具!
能够从损坏的Sybase ASE设备文件(.dat)上提取数据的非常规恢复工具。

Sybase ASE数据库恢复工具READSYBDEVICE的主要功能:

  1. 被勒索病毒加密数据文件及备份文件情况下的恢复;
  2. 系统崩溃只剩下数据文件的情况下的恢复,甚至数据库文件不存在而只有损坏的备份文件情况下的恢复;
  3. 因断电、硬盘坏道等造成数据库文件损坏情况下的恢复;
  4. delete数据恢复、误update数据恢复、误删除表(drop)恢复、误truncate表恢复 等;
  5. 各种Sybase内部系统表损坏、索引错误的修复;
  6. master数据库损坏而无法正常运行情况下的恢复;
  7. Sybase数据库被标记为可疑,不可用等情况的恢复;
  8. Sybase数据库中数据文件内部出现坏块情况下的恢复;
  9. Sybase数据库无数据文件但有日志文件的情况下的恢复;
  10. Sybase数据库只有数据文件无任何日志文件的情况下的恢复;
  11. Sybase数据文件被误删除情况下的碎片提取恢复;
  12. 磁盘阵列上的Sybase数据库被误格式化情况下的数据库恢复;
  13. 数据库sysobjects等系统表损坏无法正常应用情况下的恢复;
  14. Sybase数据库还原数据库出现失败情况下的恢复;
  15. Sybase数据库只剩下损坏的备份文件情况下的恢复。

Sybase ASE数据库恢复工具READSYBDEVICE支持的版本:

Sybase ASE 11.0.x,11.5.x,11.9.x,12.0.x,12.5.x,15.0.x,15.5.x,15.7.x,16.0.x


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

SQL Server数据库恢复工具SQLRescue:

一个不依赖数据库管理系统、直接从SQL Server数据库文件上提取数据的业内领先的恢复工具!
能够从损坏的SQL Server数据库文件(.mdf)上提取数据的非常规恢复工具。

SQL Server数据库恢复工具SQLRescue的主要功能:

  1. 系统崩溃只剩下数据文件的情况下的恢复,即无日志文件或者日志文件损坏情况下的恢复;
  2. 断电导致数据库文件损坏情况下的恢复;
  3. 硬盘坏道造成数据库损坏情况下的恢复;
  4. 数据文件内部存在坏页情况下的恢复;
  5. 企业管理器误删除数据表记录,管理软件误删除数据表记录的恢复;
  6. 并闩锁错误、格式化、误删除后导致软件不能使用的情况;
  7. 无法读取并闩锁页sysindexes失败情况下的修复;
  8. 数据文件被误删除情况下的碎片提取恢复;
  9. 系统表损坏、索引错误、误删除数据库表、删除记录的数据找回;
  10. master数据库损坏而无法正常运行情况下的恢复;
  11. 数据文件无法附加情况下的数据恢复;
  12. 数据库被标记为可疑,质疑,不可用等情况的恢复;
  13. 数据库sysobjects等系统表损坏情况下的恢复;
  14. 数据被误(drop、delete、truncate)删除表数据的恢复,误update后的数据恢复等;
  15. 还原时报一致性错误,错误823等情况下的数据恢复,各种错误提示的数据库文件修复;
  16. 数据库被误格式化等情况下的数据库恢复;
  17. 日志收缩造成数据库损坏情况下的恢复;
  18. 仅剩损坏的备份文件情况下的恢复。

SQL Server数据库恢复工具SQLRescue技术特点:

只要SQL Server数据库的数据文件存在,我们就有办法帮您从数据文件中找回重要数据。
  1. 从数据文件中直接恢复数据
  2. 不能附加时直接恢复数据并生成新的数据库
  3. 系统表损坏的数据库修复
  4. 快速修复SQL 823错误、连接中断错误

SQL Server数据库恢复工具SQLRescue支持的版本:

Microsoft SQL Server 7.0, 2000, 2005, 2008, 2008R2, 2012, 2014, 2016, 2017,2019。
+-------------------------------------华丽的分割线-------------------------------------------------------------------------