`
fengpeng
  • 浏览: 103109 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

我来说说数据库中的identity gap问题

    博客分类:
  • Sql
阅读更多
关键字: Database   database sybase    
1:identity
Oracle, DB2, pgSQL中都有sequence的概念,这个概念比Identity先进很多,在Sybase中没有Sequence对象,与之相对应的是Identity
2:identity 的创建
identity跟sequence对象完成的功能类似,但是有一定的约束,每个table只能有一个identity的列,列的类型必须是numberic(n,0).
sql 代码
 
  1. create table table_name  
  2. (column_name numeric(precision ,0) identity)  

3:identity gap的产生:
缺省情况下Sybase Adaptive Server会给identity字段分配一段数字到内存中,在磁盘上记录被分派到内存中的最大的数值,
这样就不用每次插入数据都需要写磁盘来记录当前identity的最大值,而是直接在内存中计算,以提高performance,默认分配到内存的
数值段是identity 字段最大值的 0.05%,这样虽然提高了效率但是如果server fail或者no wait重起,那么内存中的数字段就会丢失,DB Server
会从记录在磁盘上的identity最大值开始计算identity值,就会产生gap,如果按照默认值来计算,server fail 和no wait重起2000次,那么
identity字段就会溢出,必须增加identity字段的长度,其实这期间会有大量的gap
4:要点提示:
a:定义identity时要对数据量有个良好的估计,例如上面的代码中identity的最大值时10的precision次幂-1,对于所有的identity都定义
numberic(18,0)是不合适的,不可能所有的表都有几十万亿的数据量
b:定义identity时要对数据量的增长情况有个良好的估计,合理设置idnetity_gap的值,而不是默认的值
sql 代码
 
  1. create table table_name  
  2. (column_name numeric(precision ,0) identity)  
  3. with identity_gap = value  

这个value值会覆盖db 默认的是identity 字段最大值的 0.05%这个值。
5:如果我已经犯了这个错误我改怎么办?
在Sybase中使用
sp_chgattribute 'TableName', 'identity_gap', gap_value
来更改gap_value为一个合理的值
分享到:
评论

相关推荐

    identity:用于MySql数据库

    在MySQL数据库中,`identity`通常与`auto_increment`属性关联在一起。此属性主要用于确保表中的主键字段能够自动递增,从而为每一行数据提供一个唯一标识符。这对于那些需要自动生成唯一ID的场景非常有用。 #### ...

    Set IDENTITY _INSERTY用法

    在数据库管理与开发过程中,`SET IDENTITY_INSERT` 是一个非常实用的功能,主要用于允许或禁止手动插入带有 `IDENTITY` 属性的字段值。这一特性对于需要进行数据迁移或者特殊场景下的数据操作非常重要。 #### 1. ...

    达梦数据库_SQL语言手册.pdf

    - **模式**:是数据库中的一个逻辑容器,用于组织相关的数据库对象(如表、视图等)。每个用户默认都有自己的模式。 #### 二、数据定义语句 - **3.1 数据库定义语句**:用于创建新的数据库。 - **3.2 数据库修改...

    如何查询数据库中表的字段信息

    今天,我们将学习如何使用SQL语句来查询数据库中表的字段信息,本文将分别介绍SQL Server和Oracle数据库的实现方法。 SQL Server数据库 在SQL Server数据库中,我们可以使用系统视图来查询表的字段信息。系统视图...

    有关pdfbox-1.3.1中Identity-H编码为乱码的解决方法

    这个问题的根本原因在于PDFBox在解析和渲染使用Identity-H编码的PDF文档时,未能正确地将Unicode字符转换为PDF中的字形。这可能涉及到字体嵌入、编码设置、或者PDFBox库自身的编码处理逻辑。 为了解决这个问题,你...

    数据库中identity字段不必是系统产生的唯一值 性能优化方法(新招)

    在数据库设计中,`identity`字段通常用于自动生成唯一的序列号,这在许多情况下非常有用,比如作为主键。然而,正如标题和描述所指出的,`identity`字段并不总是需要系统自动生成唯一值,我们可以根据需求进行灵活...

    数据库关系图导出到sql文件 数据库模型图导出到sql文件

    为了解决这个问题,我们可以使用以下方法将数据库关系图导出到sql文件中。 首先,建立一个测试库,随便建立一个表也叫test,建立一个数据库模型图,将test表加入其中。然后,执行以下sql语句将数据库模型图放入一个...

    SQL Server数据库中处理空值时常见问题

    SQL Server 数据库中处理空值时常见问题 数据完整性是任何数据库系统要保证的重点。不管系统计划得有多好,空数据值的问题总是存在。本文探讨了在 SQL Server 中处理这些值时涉及的 3 个问题:计数、使用空表值以及...

    使用Springboot上传图片并将URL保存到数据库中

    本示例将详细讲解如何实现一个简单的文件上传功能,将图片上传至服务器,并将图片的URL保存到数据库中。 首先,我们需要在Spring Boot项目中引入所需的依赖。对于文件上传,Spring Boot本身提供了`spring-boot-...

    SQL Server 之 SET IDENTITY_INSERT

    在SQL Server中,`SET IDENTITY_INSERT`是一个重要的命令,它主要用于处理标识列(即自动编号列,通常由`IDENTITY`关键字定义)的显式赋值问题。默认情况下,当向一个包含`IDENTITY`属性的表中插入数据时,标识列的...

    C# 上传图片到数据库,并从数据库中读取出来,简单的图片浏览器

    在C#编程中,将图片上传到数据库以及从数据库中读取图片是常见的操作,尤其在构建具有图像存储功能的应用程序时。以下是一份详细的知识点解析,涵盖了这个过程的关键步骤和技术。 首先,我们需要理解数据库如何存储...

    JDBC访问数据库

    在本次实验中,实验者将通过JDBC来访问数据库,实验内容包括了多个部分,首先是UML建模、数据库设计以及通过JDBC访问数据库。UML(统一建模语言)是软件工程中广泛使用的建模语言,它提供了一套标准化的图示方法,...

    国产数据库+ Springboot操作示例

    总的来说,这个示例旨在帮助开发者了解如何在SpringBoot项目中与国产数据库进行无缝集成,利用其高效、稳定的特点,构建可靠的数据存储和处理系统。通过实践和学习,我们可以更好地掌握这些技术,推动国产数据库在...

    Hibernate 多数据库支持解决方案

    未来 Hibernate是一个强大的Java持久化框架...以上各点提供了实现这一目标的基础,但实际项目中可能还需要解决更多特定于数据库的问题。通过良好的设计和测试,可以确保Hibernate应用程序在多种数据库环境下稳定运行。

    MFC(VS)保存图片到SQLServer数据库

    在Windows 10 64位操作系统中,使用Visual Studio 2017的MFC(Microsoft Foundation Classes)框架开发应用程序时,有时我们需要处理图像数据并将其存储到SQL Server数据库中。MFC是C++的一个类库,它为构建Windows...

    MVC5 Identity Dapper-Example

    总结来说,这个项目展示了如何在MVC5环境中利用Identity进行用户认证,并结合Dapper进行高效的数据操作。同时,还融入了DDD思想,使得代码更加贴近业务。这个示例对于想要了解和实践这些技术的开发者来说,无疑是一...

    ArcGis右击菜单显示自定义Identity属性窗口

    总的来说,理解和掌握如何在ArcGIS中自定义右键菜单的Identity属性窗口是一项高级技能,它涉及到编程和界面设计,但能显著提升地理信息系统的工作效率和用户体验。通过深入学习和实践,你可以根据具体项目需求创建出...

Global site tag (gtag.js) - Google Analytics