Sybase中的表具有唯一的varchar(32)列和其他一些列。它也在此列上编入索引。
我需要定期截断它,然后用其他表中的新数据重新填充它。
insert into MyTable
select list_of_columns
from OtherTable
where some_simple_conditions
order by MyUniqueId
如果我们要处理几千行,如果insert
有order by
条款,它是否有助于加快select
的速度?如果是这样,这种时间收益是否会补偿订购select
查询所需的额外时间?
我可以尝试一下,但目前我的数据集很小,结果也不多。
答案 0 :(得分:2)
只有几千行,即使它快一点,你也不太可能看到很多差异。如果您预计接近10,000行左右,那么您可能会开始看到明显的差异 - 尝试创建一个大型测试数据集并进行基准测试以确定它是否有帮助。
由于您正在截断,因此删除和重新创建索引应该比插入具有现有索引的表更快。同样,对于一个相对较小的表,它应该没关系 - 如果一切都可以适应你可用的RAM量,那么它将会非常快。
另一个想法 - 取决于Sybase如何进行索引,传递排序列表可以减慢速度。尝试对ORDER BY RANDOM()进行基准测试,看看是否是这种情况。
答案 1 :(得分:0)
我不相信INSERT中的订单速度,所以不要徒劳地尝试提高ORDER BY来提高性能。
答案 2 :(得分:0)
我会说你执行这些功能的顺序并不重要。 只需使用插入INSERT INTO的常规方式,然后再进行其余操作。
答案 3 :(得分:0)
我不能说sybase,但如果仔细排序记录,MS SQL插入速度会更快。排序可以最小化索引扩展的数量。如您所知,最好填充表ant,然后创建索引。在插入之前对数据进行排序会产生类似的效果。
答案 4 :(得分:0)
您插入数据的顺序通常不可提高性能。影响插入速度的问题与数据存储的数据库机制有关,而不是插入顺序。
将大量数据插入表中时可能遇到的一个性能问题是更新表上的索引所需的时间。但是,在这种情况下,您插入数据的顺序也无济于事。
如果您有大量数据,而且我的意思是数十万 数百万的记录,您可以考虑将索引放在桌面上,插入记录然后重新创建索引。
答案 5 :(得分:0)
删除和重新创建索引(至少在SQL Server中)是执行插入的最佳方法。至少在某些时候;-)严重的是,如果你没有注意到任何重大的性能问题,请不要惹它。