我的数据结构大约有 20 万个 Innodb 表。每个表不超过 300 行。并且该数字每天增长约 3000 个表。我担心这可能会在查找所需表时成为我的 I/O 操作的瓶颈。每个表都完全独立于其他表。并且我在查询中只使用 SELECT 和 WHERE,没有其他任何操作。我该如何优化查询速度?例如,保持这个速度是否是Innodb_file_per_table=1
一个好的衡量标准?此外,服务器需要将近一个小时才能启动,有没有办法加快速度?
答案1
立即提问
对于小表,file_per_table 可能不是最佳选择。最好将它们放在主表空间中 ( ibdata
)。
OK 不喜欢拥有数百万个表,尤其是当它们位于单个目录中时 —— 所有这些TABLEs
都在同一个目录中DATABASE
。
“启动需要将近一个小时”——这是大量 file_per_table 表的成本。
可能最快和最简单的切换方法是转储(通过mysqldump
或类似工具),启动一个新的 MySQL(可能在启动时升级),然后
SET GLOBAL innodb_file_per_table = OFF;
并重新加载数据。
更深层次的问题
让我们讨论一下为什么要有这么多表。你说“完全独立”,但你的意思是“相同的模式”但“数据永远不会一起提取”吗?通常,具有“相同模式”(即,CREATE TABLE
除了表名之外相同)的表应该放在同一个表中。这种新结构需要一个额外的列来区分不同的表。此外,索引需要修改。请提供SHOW CREATE TABLE
无数个类似表格中的一个;我会进一步提供建议。
如果大多数表具有不同的架构;请向我们展示一些示例。希望您能看到一种可以大幅减少表数量的模式。