与Mysql合并表有限制吗?

时间:2010-03-09 11:46:48

标签: mysql

我正在使用mysql 5.0创建一个开源项目的数据库 它用于存储特定语言的句子及其他语言的翻译

我曾经有一个大表“句子”和“sentences_translations”(用于连接句子到句子)表但是我们现在有近百万个条目,这开始有点慢,而且,大多数请求都是使用“where lang =”

制作

所以我决定用语言创建一个表 sentences_LANGUAGECODE

和sentences_translation_LANGSOURCE_LANGTARGET

并创建这样的合并表 句子_ENG_OTHERS合并句子_ENG_ARA句子_ENG_DEU等...    当我们想要用英语句子的所有语言翻译时 sentences_OTHERS_ENG    当我们想要只有一些句子的英文翻译

我已经创建了一个脚本来创建所有这些表(它们大约有31种语言,所以超过60种合并表),我已经测试过,这项工作真的非常棒,使用160ms的请求现在只需要30: ) 但我发现第15次使用后我的所有合并表都有“NULL”作为存储引擎的类型 而不是MRG_MYISAM,如果删除一个,那么我可以创建一个其他的,在每个创建之间使用FLUSH表也允许我创建更多的合并表

这是mysql的限制吗?我们可以覆盖它吗?

感谢您的回答

2 个答案:

答案 0 :(得分:1)

在MySQL Merge存储引擎论坛的这个帖子中,似乎可以将数千个表合并到MERGE表中。有些人遇到了文件句柄耗尽的问题,但通常只有在合并了几百个表之后才会遇到这种情况。我想这也取决于你使用的操作系统 - 也许Windows的阈值较低。

MySQL Forum for MERGE storage engine

就个人而言,如果可能的话,我会避免使用Merge引擎。我在2002年开始使用它,并且被许多MySQL版本的许多错误所困扰。我得到的印象是Merge引擎不是MySQL的优先考虑事项,也许还没有经过很好的测试。在5.1中进行分区似乎更有特色,但对于您的应用程序,我很惊讶您只有一百万行的性能问题。你的索引效率如何?

答案 1 :(得分:0)

(感谢Martin告诉我的方式)

在Linux上,您必须编辑/etc/security/limits.conf和这样的行

* hard nofile 4096

下次重启时就可以了 让它直接停止你的服务器

ulimit -n 4096 (or more , as root)

直接重启服务器

我还不知道窗户怎么样