2011-03-15 38 views
2

我有一个大的MySQL表(大约7.5亿行),我只想提取几列。在查询完成之前,我可以强制MySQL输出结果吗?

SELECT id, delid FROM tbl_name; 

没有加入或选择标准或任何东西。这两个字段都有一个索引(分开)。

原则上,它可能刚刚开始阅读表格并立即将值分发出去,但实际上整个系统只是咀嚼记忆并基本上停下来。

好像正在执行整个查询,并产生的任何输出前,输出保存在某个地方......

我搜索上unbuffering,关闭缓存等,但就是无法找到答案。

(mysqldump的是几乎什么,我想,除了它转储整个表 - 但至少它只是将立即开始产生输出)

+0

什么是你与7.5亿行2列做准备?这些列中存储了什么以及它们是什么类型的存储?你的数据库服务器有多少内存?你的处理代码写入了多少内存/哪种语言? – P4ul 2011-03-15 07:52:37

+0

删除重复项(使用UNIX排序)并将它们放回到另一个表中。服务器只有4Gb RAM,但我不明白为什么它需要RAM,除非有一些要求必须在发出之前存储整个输出。 – 2011-03-15 07:55:16

回答

3

你看着load data infileselect into

我认为下面是接近你想要做什么:

select id,delid 
    into outfile 'C:\\ronnis.csv' 
     fields terminated by ',' 
    from tbl_name; 

<perform unix sort> 

load data infile 'C:\\ronnis.csv' 
into table new_tbl_name 
fields terminated by ','; 
+0

Hurray ....这可以做到这一点(尽管我必须创建一个可写入服务器的世界可写目录)。无缓冲输出立即出现在指定的文件中。 – 2011-03-15 08:29:32

0

我能想到的是手工做这个有限制嘛。我不知道总共会有多少速度提升,但至少您的结果集会更小。另一方面,你将不得不处理几个查询,这可能会使这个问题变得很糟糕。

你可以使用一个unbuffered query,但你不能其他查询“忙里偷闲”,而这是在运行,我不知道这是否是在你的情况下,sollution

+0

我是这个数据集的唯一用户,所以没有数据库无法访问的问题。但是“unbuffered_query”是一个PHP而不是MySQL语句。 – 2011-03-15 08:00:55

+0

就是这样,但最终你使用的是一个'客户'连接到你的数据库,并且php-as-a-client支持这种返回结果集的方式。但这只是一个想法。 – Nanne 2011-03-15 08:49:32

相关问题