MsSQL   发布时间:2022-05-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了sql-server – 在SQL Server上优化大型表(1M行)的方法是什么?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我将巴西股市数据导入sql Server数据库.现在我有一张表格,包括三种资产的价格信息:股票,期权和远期.我还在2006年的数据,表中有超过五十万条记录.我有更多的12年数据导入,所以表将肯定超过一百万条记录.

现在,我的第一个优化方法是将数据保持在最小的大小,所以我将行大小减少到平均60个字节,并具有以下列:

[Stock] [int] NOT NULL
[Date] [smalldatetiR_280_11845@e] NOT NULL
[Open] [smallmoney] NOT NULL
[High] [smallmoney] NOT NULL
[Low] [smallmoney] NOT NULL
 [smallmoney] NOT NULL
[Trades] [int] NOT NULL
[Quantity] [bigint] NOT NULL
[Volume] [money] NOT NULL

现在,第二种优化方法是制作聚类索引.实际上,主索引是自动聚类的,我把它作为具有库存和日期字段的复合索引.这是独一无二的,我在同一天不能有同一股票的两个报价数据.

集群索引确保来自同一股票的报价可以保持在一起,并且可能按日期排序.这第二条信息是真的吗?

现在有50万条记录,大约需要200ms才能从特定的资产中选择700个报价.我相信这个数字会随着表的增长而增加.

现在第三种方法,我正在虑将表格分成三个表格,分别是针对特定市场(股票,期权和远期).这可能会将桌面尺寸缩小1/3.现在,这种做法有帮助吗?现在桌子的大小是50mb,所以它完全可以在RAM中完成,没有多大的麻烦.

另一种方法是使用sql Server的分区功能.我不太了解它,但是我认为通常在表格很大的情况下使用,您可以跨越多个磁盘来减少I / O延迟,是吗?在这种情况下,分区是否有帮助?我相信我可以在不同的表格中分区最新的值(最新的年份)和最旧的值.寻找最新数据的可能性更高,而小分区可能会更快,对吗?

什么是其他好的方法来使这个最快?主要选择使用表将用于从特定资产(如最近3个月的资产X)中寻找特定范围的记录.将有另一个用法,但这将是最常见的,可能超过3k用户并发.

解决方法

>在100万条记录中,我不会认为这是一个特别大的表,需要不寻常的优化技术,如分割表,反规范化等.但是,当您尝试所有不影响的正常方法时,这些决定将会到来您使用标准查询技术的能力.

这在逻辑上是正确的 – 聚集索引定义了磁盘上记录的逻辑顺序,这是您应该关心的. sql Server可能会放弃在物理块内进行排序的开销,但它仍然会像之前一样运行,因此这并不重要.在任何情况下,查询一个库存大概可能是1或2页的读取;并且优化器不会在页面读取中的无序数据中受益匪浅.

不一定明显表大小与查询速度之间没有线性关系.通常还有更多的虑因素更重要.我不会在你所描述的范围内担心它.这是你关心的原因吗?似乎对我来说,200毫秒是非常好的,足以使您达到加载桌面的位置,您可以开始进行现实的测试,并更好地了解现实生活中的表现.

没有!这种优化太早了,可能还是比较早.

同样的评论.您将能够坚持长期严格的逻辑,完全规范的模式设计.

最好的第一步就是集中在股票上.插入速度至关重要,直到您查看每秒插入的多个记录 – 我没有看到任何活动附近的任何地方.这应该使您接近最大的效率,因为它将有效地读取与股票相关的每个记录,这似乎是您最常见的指标.任何进一步的优化需要根据测试来完成.

大佬总结

以上是大佬教程为你收集整理的sql-server – 在SQL Server上优化大型表(1M行)的方法是什么?全部内容,希望文章能够帮你解决sql-server – 在SQL Server上优化大型表(1M行)的方法是什么?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: