如果我有一个包含5亿行的表并且索引良好,那么数据库会遭受任何性能下降吗?我想知道我是否需要在多个数据库上对表进行分片,即使它们可能位于同一服务器上。每行的大小可能是1k,因为它有几个文本字段。即使我用外键键入它们,它们仍然是500万行表,包括700字节的数据。
此外,任何有关此尺寸桌子的引擎选择的提示都会很棒。 任何建议将不胜感激。
干杯
富
答案 0 :(得分:1)
MySQL支持大型表的user-defined partitioning。
至于您是否需要它,这取决于您的应用程序以及您提出的查询。看看分区的优点,看看它们是否适用于您的情况:
分区可以在一个表中存储比在单个磁盘或文件系统分区上保存的数据更多的数据。
通过删除仅包含该数据的分区(或多个分区),通常可以轻松地从分区表中删除失去其实用性的数据。相反,在某些情况下,通过添加一个或多个新分区来特别存储该数据,可以极大地促进添加新数据的过程。
由于满足给定WHERE子句的数据只能存储在一个或多个分区上,因此可以大大优化某些查询,这些分区会自动从搜索中排除任何剩余的分区。由于在创建分区表后可以更改分区,因此可以重新组织数据以增强在首次设置分区方案时可能不常使用的频繁查询。这种排除不匹配分区(以及它们包含的任何行)的能力通常被称为分区修剪,并在MySQL 5.1.6中实现。有关更多信息,请参见第18.4节“分区修剪”。
答案 1 :(得分:0)
我经历过,即使使用适当的索引,当表格加入时,InnoDB表格中的记录超过1000万也会非常慢。你自己只是从这个表中选择,没有连接,分组或排序,它可能只是工作。