评论

收藏

[Sybase] 2.sybase进阶操作-索引

数据库 数据库 发布于:2021-12-17 18:53 | 阅读数:289 | 评论:0


  • 索引目的

  • 提供更快的数据访问
  • 帮助避免表扫描
  • 为表扫描设置边界
  • 帮助避免某些排序
  • 增强唯一性
所有的ASE索引都是B树结构。

  • 索引类型

    • APL

APL 表示all pages lock。
全页加锁既是一个新术语,它又是由ASE(Adaptive Server Enterprise)在过去所支持的一种加锁类型。这种类型有下列特性:
对所有可被访问的页面在页面级加锁
当各种类型的页面以任何方式发生改变时,对这些排它性的页面进行加锁;而且这种加锁机制一直保持到该事务终止;
当下一个所需的页面已经成功地获得,对那些已经释放的的当前访问页进行共享页面加锁(如果采用了第三层ANSI隔离,则把这种加锁机制保持到该事务终止为止)
采用页级时间印记(timestamp)以确定是否发生改变,详细信息记录在事务日志中,以便在系统恢复时以向前或向后方式使用。
这种加锁方式常常提供性能最高的解决方案,特别是当应用设计时已经考虑了这些特性时更是如此。但是,有一些应用系统,当发生某些活动时,这种对整个页面进行加锁的方式就可能会对系统性能产生有重大意义的影响。对于那些面对诸如文件系统或其它已经支持更细小尺度加锁机制的数据库厂家产品的一般环境而设计的应用系统而言,这种情况尤其如此。
此外,还存在一系列问题,它们要围绕着更加困难的条件进行工作。它们通常要采用更加具有Sybase特性的解决方案。对于商用的应用软件制造厂商而言,对他们是一个挑战,因为这将要求他们必须跨越他们所支持的数据库平台,去完成维护其原代码的工作,而这个工作有相当工作量。在这个领域的基本问题如下:
对已经按照升序值创建的非群聚性索引的最末端叶型页面存在着争议
对非群聚性索引的表进行插入和查询时可能发生死锁;
在按照群聚性的索引值进行更新和对非群聚性索引的表进行查询访问之间可能发生死锁;
在没有作索引的表的最后一行可能发生冲突(尽管对最后的特定地址可以使用分区) ;
有可能使行数很少的表之间发生潜在的冲突(尽管对特定的地址可以使用填充因子[fillfactors]和每页最大行数[max_rows_per_page]这两个参数)
对每个页面两边进行加锁的需要常常被分割开来;
如果一个表特别小,以致在一个单一页面中进行驻留,那么对单一行的访问实际上将破坏对整个表的加锁机制。
事务处理时,既锁数据页,又锁索引页,且只有表锁和页锁。


    • 优化统计信息

优化器统计信息中包含的对表大小和数据分布的不同的度量。不同统计信息使用不同的方法来测量和保存的。一些由服务器自动进行,另一些由表拥有者或管理员进行。保存在列数据的钱255字节中。


    • DOL

DOL了表示data only lock
DOL表,事务处理时,只锁数据页,不锁索引页,具有表锁、页锁和行锁。
DOL表可以提高并发性,减少死锁。

  • 填充因子
填充因子默认是服务器级别的,创建索引时候可以覆盖。
例如:
1> create index idx_name on table1 (name)
2> with fillfactor = 10
3> go
N可以是0~100.默认是0.
N=0表示数据页是满的,索引页75%是满的
N=100 除了根页以外,数据页和索引页都是满的。


关注下面的标签,发现更多相似文章