随着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数据库技术问题需要咨询,请联系我!
以下官方手册为ASE 15.7 ESD#2中文版:
- 新增功能公告 适用于 Windows、Linux 和 UNIX 的 Open Server 15.7 和 SDK 15.7
- 新增功能摘要
- 新增功能指南
- ASE 15.7 发行公告
- 配置指南(windows)
- 安装指南(windows)
- 参考手册:构件块
- 参考手册:命令
- 参考手册:过程
- 参考手册:表
- Transact-SQL® 用户指南
- 系统管理指南,卷 1
- 系统管理指南,卷 2
- 性能和调优系列:基础知识
- 性能和调优系列:锁定和并发控制
- 性能和调优系列:监控表
- 性能和调优系列:物理数据库调优
- 性能和调优系列:查询处理和抽象计划
- 性能和调优系列:使用 sp_sysmon 监控 Adaptive Server
- 性能和调优系列:利用统计分析改进性能
- 程序员参考 jConnect for JDBC 7.0.7
- Adaptive Server Enterprise 中的 Java
- 组件集成服务用户指南
- Ribo 用户指南
- 内存数据库用户指南
- Sybase Control Center for Adaptive Server® Enterprise
- 安全性管理指南
- 实用程序指南
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 输出一条错误消息并给出重复条目。
警告! 如果表包含任何非空 text、unitext 或 image 列,则 Adaptive Server
不检测重复行。
如果使用 allow_dup_row 选项创建索引,则生成重复键值的 update 和
insert 命令能够成功。
组合索引 (键值由多个列组成的索引)也可以唯一。
缺省值为非唯一。若要对包含重复行的表创建非唯一聚簇索引,请指 定 allow_dup_row 或 ignore_dup_row 。请参见 第 143 页的 “重复行 ”。
在域、列表和散列分区表上创建唯一本地索引时,索引键列表是分区 键列表的超集。
clustered
意味着当前数据库设备上的行的物理顺序与这些行的索引顺序相同。 聚簇索引的底或叶级 包含实际的数据页。聚簇索引检索数据几乎总是 比非聚簇索引快。每个表只允许有一个聚簇索引。请参见 第 142 页的 “创建聚簇索引 ”。
如果未指定 clustered,则假定为 nonclustered。 nonclustered
意味着行的物理顺序与它们的索引顺序不同。非聚簇索引的叶级包含
指向数据页上的行的指针。每个表可以有多达 249 个非聚簇索引。
index_name
是索引的名称。索引名称在表内必须唯一,但在数据库内不需要唯一。
table_name 是索引的一个或多个列所在表的名称。如果该表位于另一数据库中, 请指定数据库名,如果数据库中有多个具有该名称的表,请指定所有 者的名称。 owner 的缺省值是当前用户,而 database 的缺省值是当前 数据库。
是有效的 Transact-SQL 表达式,该表达式至少引用一个基列,并且不 包含来自其它表、局部和全局变量、集合函数或子查询的列。
注释 column_expressions 替换了 Adaptive Server 15.0 以前的版本中使用 的 column_name 变量。
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 值会导致每个索引 (或索引和数 据)占用较多的存储空间。
警告! 使用 fillfactor 创建聚簇索引会影响数据占用的存储空间,因为创 建聚簇索引时 Adaptive Server 会重新分配数据。
限制数据页和索引的叶级页上的行数。与 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。
警告! 使用 max_rows_per_page 创建聚簇索引会影响数据占用的存储空 间,因为创建聚簇索引时 Adaptive Server 会重新分配数据。
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 将报告错误:
• 使用引用加密列的表达式创建函数索引
• 在用初始化矢量或随机填充加密的列中创建索引 注释 不能在函数索引表达式中使用加密列。
在索引列名称之后用 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: 索引选项
索引类型 选项
聚簇 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 支持:
索引类型 表类型
本地聚簇和非聚簇分区索引 分区表
全局、聚簇、未分区索引 循环分区表
全局、非聚簇、未分区索引 所有分区表
• 对于域、散列和列表分区表,聚簇索引始终是本地索引。无论语法 中是否包含“local index”,Adaptive Server 都将创建本地聚簇索引。
创建基于函数的索引
• 可以直接对表达式创建索引。
• 表达式必须是确定性的。
• 由于 Adaptive Server 不检验表达式索引键的确定性属性,所以用户 必须手动维护该属性。更改此属性可能导致意外结果。
• 由于基于函数的索引键必须具有确定性,所以其结果已预先求值, 可重复使用而无需重新求值。 Adaptive Server 假设所有基于函数的 索引键都是确定性的,并在查询中引用时使用对它们预先求值得到 的值;仅当其基列值发生更改时才对它们重新求值。
• 一个索引可以有多个基于函数的索引键或一个基于函数的索引键与 常规列的组合。
• 用作索引键的表达式必须是确定性的。表达式键不同于计算列索引 键,后者只需求值一次,并且不需要确定性属性。而表达式在指定 查询中每次出现时都必须重新求值,并且必须始终返回相同的结果。
• 如果基于函数的索引所引用的用户定义函数被删除或无效,调用该 函数的任何操作都会失败。
• Adaptive Server 不支持基于函数的聚簇索引。
• 不能使用 sorted_data 选项创建基于函数的索引。
• 创建表达式的索引键后,仅当该表达式与用于创建索引键的表达式 完全相同时,后续查询才会将该表达式视为索引键。
• 对基列执行任何 insert、 delete 和 update 操作都会导致 Adaptive Server 自动更新基于函数的索引键值。
标准 符合 ANSI SQL 的级别Transact-SQL 扩展。
权限 对 create index 的权限检查因您的细化权限设置而异。
细化权限已启用 在启用细化权限的情况下,您必须是表所有者或具有 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)上提取数据的非常规恢复工具
- 适用于所有的SQL Anywhere版本 包括:5.x,6.x,7.x,8.x,9.x,10.x,11.x,12.x,16.x,17.x
- 适用于所有的UltraLite版本
- 能够恢复出来表结构和数据
- 能够恢复自定义数据类型
- 能够恢复存储过程等对象的语法
- 能够导出到目标数据库
- 能够导出到SQL文件并生成导入脚本
- 支持多种字符集,包括:cp850、cp936、gb18030、utf8等
- 能够恢复未加密或者简单加密类型的数据
- 简单易用
- 限制:不支持AES加密的数据文件
SQL Anywhere数据库非常规恢复工具ReadASADB使用介绍
Sybase SQL Anywhere数据库恢复工具ReadASADB适用场景
各种误操作:
- 误截断表(truncate table)
- 误删除表(drop table)
- 错误的where条件误删数据
- 误删除db或log文件
- 误删除表中的字段
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的主要功能:
- 被勒索病毒加密数据文件及备份文件情况下的恢复;
- 系统崩溃只剩下数据文件的情况下的恢复,甚至数据库文件不存在而只有损坏的备份文件情况下的恢复;
- 因断电、硬盘坏道等造成数据库文件损坏情况下的恢复;
- delete数据恢复、误update数据恢复、误删除表(drop)恢复、误truncate表恢复 等;
- 各种Sybase内部系统表损坏、索引错误的修复;
- master数据库损坏而无法正常运行情况下的恢复;
- Sybase数据库被标记为可疑,不可用等情况的恢复;
- Sybase数据库中数据文件内部出现坏块情况下的恢复;
- Sybase数据库无数据文件但有日志文件的情况下的恢复;
- Sybase数据库只有数据文件无任何日志文件的情况下的恢复;
- Sybase数据文件被误删除情况下的碎片提取恢复;
- 磁盘阵列上的Sybase数据库被误格式化情况下的数据库恢复;
- 数据库sysobjects等系统表损坏无法正常应用情况下的恢复;
- Sybase数据库还原数据库出现失败情况下的恢复;
- 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.xSQL Server数据库恢复工具SQLRescue:
一个不依赖数据库管理系统、直接从SQL Server数据库文件上提取数据的业内领先的恢复工具!能够从损坏的SQL Server数据库文件(.mdf)上提取数据的非常规恢复工具。
SQL Server数据库恢复工具SQLRescue的主要功能:
- 系统崩溃只剩下数据文件的情况下的恢复,即无日志文件或者日志文件损坏情况下的恢复;
- 断电导致数据库文件损坏情况下的恢复;
- 硬盘坏道造成数据库损坏情况下的恢复;
- 数据文件内部存在坏页情况下的恢复;
- 企业管理器误删除数据表记录,管理软件误删除数据表记录的恢复;
- 并闩锁错误、格式化、误删除后导致软件不能使用的情况;
- 无法读取并闩锁页sysindexes失败情况下的修复;
- 数据文件被误删除情况下的碎片提取恢复;
- 系统表损坏、索引错误、误删除数据库表、删除记录的数据找回;
- master数据库损坏而无法正常运行情况下的恢复;
- 数据文件无法附加情况下的数据恢复;
- 数据库被标记为可疑,质疑,不可用等情况的恢复;
- 数据库sysobjects等系统表损坏情况下的恢复;
- 数据被误(drop、delete、truncate)删除表数据的恢复,误update后的数据恢复等;
- 还原时报一致性错误,错误823等情况下的数据恢复,各种错误提示的数据库文件修复;
- 数据库被误格式化等情况下的数据库恢复;
- 日志收缩造成数据库损坏情况下的恢复;
- 仅剩损坏的备份文件情况下的恢复。
SQL Server数据库恢复工具SQLRescue技术特点:
只要SQL Server数据库的数据文件存在,我们就有办法帮您从数据文件中找回重要数据。- 从数据文件中直接恢复数据
- 不能附加时直接恢复数据并生成新的数据库
- 系统表损坏的数据库修复
- 快速修复SQL 823错误、连接中断错误
SQL Server数据库恢复工具SQLRescue支持的版本:
Microsoft SQL Server 7.0, 2000, 2005, 2008, 2008R2, 2012, 2014, 2016, 2017,2019。+-------------------------------------华丽的分割线-------------------------------------------------------------------------