【问题标题】:Is it quicker to insert sorted data into a Sybase table?将已排序的数据插入 Sybase 表是否更快?
【发布时间】:2011-02-24 02:12:07
【问题描述】:

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

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

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

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

我可以试试这个,但目前我的数据集很小,结果说不出来。

【问题讨论】:

    标签: sql sybase


    【解决方案1】:

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

    不过,由于您正在截断,因此删除和重新创建索引应该比插入到具有现有索引的表中更快。同样,对于一个相对较小的表,这无关紧要 - 如果一切都可以舒适地适应您可用的 RAM 量,那么它会很快。

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

    【讨论】:

      【解决方案2】:

      我不相信 INSERT 中的订单速度,所以不要徒劳地运行 ORDER BY 来提高性能。

      【讨论】:

        【解决方案3】:

        我会说执行这些函数的顺序并不重要。 只需使用插入 INSERT INTO 的常规方式,然后再执行其余操作。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

            向表中插入大量数据时可能遇到的一个性能问题是更新表上的索引所需的时间。但是,在这种情况下,插入数据的顺序对您没有帮助。

            如果您有大量数据,我的意思是 数十万 或者 数百万 条记录,您可以考虑 删除表中的索引,插入记录然后重新创建索引。

            【讨论】:

              【解决方案6】:

              删除和重新创建索引(至少在 SQL Server 中)是迄今为止进行插入的最佳方式。至少在某些时候 ;-) 说真的,如果您没有注意到任何重大的性能问题,请不要乱用它。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2013-05-21
                • 1970-01-01
                • 2012-11-23
                • 1970-01-01
                • 2011-11-30
                • 2016-12-29
                • 2023-04-07
                相关资源
                最近更新 更多