繁体   English   中英

将排序后的数据插入Sybase表是否更快?

[英]Is it quicker to insert sorted data into a Sybase table?

Sybase中的表具有唯一的varchar(32)列和其他一些列。 它也在此列上索引。

我需要定期地截断它,并用其他表中的新数据重新填充它。

insert into MyTable  
  select list_of_columns  
  from OtherTable  
  where some_simple_conditions  
  order by MyUniqueId  

如果我们要处理几千行,如果我们具有selectorder by子句,这是否有助于加快insert速度? 如果是这样,那么时间上的收益会补偿订购select查询所需的额外时间吗?

我可以尝试一下,但是目前我的数据集很小,结果说的并不多。

仅几千行,即使速度稍快,您也不会看到太大的差异。 如果您预计将达到10,000行左右,那您可能会开始看到明显的不同-尝试创建一个大型测试数据集并进行基准测试以查看是否有帮助。

但是,由于要截断,因此删除和重新创建索引要比插入具有现有索引的表中的速度更快。 再次,对于相对较小的表,这没关系-如果所有内容都可以舒适地容纳在您可用的RAM量中,那么它将很快。

另一个想法-根据Sybase进行索引的方式,传递排序列表可能会使它变慢。 尝试对ORDER BY RANDOM()进行基准测试,看看是否是这种情况。

我不相信INSERT中的订单速度,因此不要徒劳地尝试提高性能。

我会说,按照什么顺序执行这些功能并不重要。 只需使用将INSERT INTO插入的常规方法,然后进行其余操作即可。

我无法说说sybase,但是如果对记录进行仔细的排序,MS SQL的插入速度会更快。 排序可以最大程度地减少索引扩展的数量。 如您所知,最好先填充表ant然后创建索引。 插入之前对数据进行排序会产生类似的效果。

插入数据的顺序通常不会提高性能。 影响插入速度的问题与数据库的数据存储机制更多的是关系,而不是插入顺序。

在表中插入大量数据时,您可能会遇到的一个性能问题是更新表上的索引所花费的时间 但是,在这种情况下,再次插入数据的顺序也无济于事。

如果您有大量数据,并且我的意思是成千上万甚至数百万条记录,那么您可以考虑将索引放在表上,插入记录,然后重新创建索引。

到目前为止,删除和重新创建索引(至少在SQL Server中)是执行插入操作的最佳方法。 至少在某些时候;-)严重的是,如果您没有注意到任何主要的性能问题,请不要与它混为一谈。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM