我的应用程序需要一个具有自动递增主键列且没有间隙的表。正如其他人所指出的,AUTOINCREMENT实现通常会导致间隙(txn回滚、删除等(。没有间隙的AUTOINCREMENT在应用程序层实现起来很简单,但我想知道是否有更好的(更SQL的(方法来实现这一点。
我喜欢没有间隙的原因是因为我想象形式的范围查询
SELECT *
FROM chainTable
WHERE chn_id >= 10005003 AND chn_id <= 10005009
比形式的查询更快
SELECT *
FROM chainTable
WHERE chn_id >= 10005003
ORDER BY chn_id
LIMIT 7
在我的应用程序中,选定的行是在同一事务中创建的。因此,我对没有缺口的需求可以放宽到在同一事务中生成的值。所以我的问题归结为:
AUTOINCREMENT列值是否在事务中生成,以保证连续(即没有间隙(?
我的猜测仍然是";否";,但我很乐意犯错。
在应用程序中管理id的开销将比让sql引擎处理它更昂贵。
对于查询,只要在该列上有适当的索引,就不会有明显的性能差异。然而,第二个查询可能会稍微快一点,因为它只需要检查一个条件。
您的评论/答案中的2个结论:
-
这里提到的用例并不合适。(没有理由期望性能出色;也许恰恰相反。(但是,
-
如果您的数据模型需要没有间隔的升序,最好自己实现。
感谢所有
<blockquote\我想象形式的范围查询
SELECT *
FROM chainTable
WHERE chn_id >= 10005003 AND chn_id <= 10005009
>相关内容
- 没有找到相关文章
最新更新
- 在windows上使用R导入xkcd字体(适用于xkcd包)
- 如何在用户输入不正确的值后使python循环程序?
- <picture> 元素在媒体查询/属性之间闪烁到 100% 宽度
- Django模板-使用字符串从表单中呈现一个字段
- didReadRSSI事件在声明后台模式进入后台时停止工作
- Twilio SMS (Java)执行失败
- 如何使用相同的算法创建两个SSH密钥?
- c -指针到数组,malloc和越界访问
- 遍历JavaScript数组不能产生正确的结果
- RegEx在SAP 7.5中以字符的第一次出现开始并结束
- 使用MS Graph Rest APi上传文件到Documentset
- 忽略正则表达式搜索中的模式错误,不要使搜索崩溃
- 在一个帐户上有多个Youtube频道.如何将提供的API密钥限制为仅1个通道?
- 如何根据输入列表中的项数更改URL ?
- scipy. integrated .quad给出ValueError:给出无效的可调用对象
- 将Pandas Datetime转换为Postgres Date
- 不能在caporal中使用prog模块
- 使用Powershell打开特定的Outlook配置文件
- 如何在WrapPanel中获得元素的坐标?
- 如何检查webpack.config.js中的监视模式?
- 如何创建动态正则表达式生成器?
- ActorReferences作为Akka中其他角色的成员变量
- 我不知道有什么区别
- 文字SQL工作:数组值必须以"{"或维度信息开头
- Go-使函数与外观相似的结构切片一起工作的惯用方法
- 在一个弹出窗口中管理多个输入的焦点
- r语言 - 进行单向方差分析
- 当应用程序保持打开状态时,标识会话超时
- 在cmake中使用PUBLIC/PRIVATE/INTERFACE的例子
- 不能将反射字段强制转换为映射
热门标签:
javascript python java c# php android html jquery c++ css ios sql mysql arrays asp.net json python-3.x ruby-on-rails .net sql-server django objective-c excel regex ruby linux ajax iphone xml vba spring asp.net-mvc database wordpress string postgresql wpf windows xcode bash git oracle list vb.net multithreading eclipse algorithm macos powershell visual-studio image forms numpy scala function api selenium