在MYSQL中按一个varchar列快速排序10亿行

时间:2011-06-08 06:19:19

标签: mysql sorting large-data-volumes

我在MYSQL中存储了10亿行,我需要通过一个varchar列按字母顺序输出它们,这是最有效的方法。允许使用其他类似于awk的linux实用程序。

3 个答案:

答案 0 :(得分:2)

MySQL可以处理十亿行。效率取决于3个主要因素:缓冲区,索引和联接。

一些建议:

尝试调整您在内存中使用的数据集

内存中的处理速度要快得多,只需这样就可以解决大量问题。使用多个服务器来托管部分数据集。将您要使用的数据部分存储在临时表等中。

首选全表扫描以索引访问

对于大型数据集,全表扫描通常比范围扫描和其他类型的索引查找更快。即使您查看1%或行或更少的全表扫描可能会更快。

避免加入大表

使用嵌套循环连接大型数据集非常昂贵。尽量避免它。连接到较小的表是可以的,但您可能希望在连接之前将它们预加载到内存中,因此不需要随机IO来填充缓存。

请注意MySQL的限制,这要求您在处理大型数据集时要格外小心。在MySQL中,查询作为单个线程运行(具有MySQL簇的例外),并且MySQL逐个发出IO请求以执行查询,这意味着如果单个查询执行时间是您关注的问题,那么许多硬盘驱动器和大量CPU将无济于事

有时最好将查询手动拆分为多个,并行运行并汇总结果集。

您没有提供有关您的设置或数据集的大量信息,但这应该为您提供一些关于要注意什么的线索。在我看来,对你进行(适当调整的)数据库排序会比编程更快,除非你的帖子中没有提到非常具体的需求。

答案 1 :(得分:1)

您是否刚尝试索引列并将其转储出来?我先尝试一下,看看表现是否充足,然后才变得充满异国情调。

答案 2 :(得分:0)

这取决于你如何定义效率。 CPU /内存/ IO /时间/编码工作量。在这种情况下重要的是什么?

“通过the_varchar_column从big_table顺序中选择*”这可能是开发人员资源的最有效使用。添加索引可能会使其运行得更快。