我在 MySql 中有一个使用 PhpMyAdmin 管理的表。目前它大约有 960,000 行。
我有一个老板喜欢在Excel中查看数据,也就是说每周,我必须将数据导出到Excel中。
我正在寻找一种更有效的方法来做到这一点。因为我实际上不能一次完成整个表格,因为它超时了。所以我一直坚持将表“分块”成更小的查询并像这样导出它。
我尝试将 Excel(和 Access)直接连接到我的数据库,但同样的问题;它超时。有没有办法延长连接限制?
你的老板是雨人吗?他只是在原始“数据”中发现“信息”吗?
还是他在 excel 中构建函数而不是询问他真正需要的东西?
和他坐一个小时,看看他实际上在用数据做什么。被问到什么问题?(手动)检测到哪些模式?编写一个真正的工具来查找该信息,然后将其插入您的监控/警报系统。
或者,换个新老板。 认真的。你可以告诉他我是这么说的。
老实说,对于这种大小的数据,我建议做一个 mysqldump 然后将表导入到另一个安装在其他地方的 MySQL 副本中,也许在专门用于此任务的虚拟机上。从那里,您可以根据需要设置超时等,而不必担心资源限制会炸毁您的生产数据库。在基于 Unix 的操作系统或基于 Windows 的系统上使用nice
进程优先级,您应该能够做到这一点,而不会对生产系统产生太大影响。
或者,您可以设置生产数据库的副本并从那里提取数据。拥有一个从生产系统复制各种表甚至整个数据库的所谓“报告数据库”实际上是大型环境中相当普遍的做法,以确保您不会意外杀死生产数据库为某人提取数字。作为一个额外的优势,您不必等待 mysqldump 备份完成才能开始为您的老板提取数据;你可以马上做。
行数不会太多。运行查询以将数据导出到 csv 文件中:
SELECT column,column2 INTO OUTFILE '/path/to/file/result.txt'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM yourtable WHERE columnx = 'çondition';
一种选择是使用表SELECT ... INTO OUTFILE
或mysqldump
将表导出为 CSV,然后 Excel 可以直接打开该表。