2008-11-13 96 views
0

表中应该有多少数据,以便读数最佳?假设我有3个字段varchar(25)。这是在MySQL中。什么是表的最佳数据量?

+1

snarky答案将是“无” - 然后读取会超快! – 2008-11-13 17:46:52

回答

1

行数不应该影响。确保您的搜索字段正确编制索引。如果你只有3个varchar(25)字段,那么你可能需要添加一个不是varchar的主键。

1

同意您应该确保您的数据正确编入索引。

除此之外,如果您担心表格大小,您可以随时实施某种类型的数据存档策略,以便在后续行中使用。

不要太担心,直到你看到问题出现,并且不会过早优化。

0

为获得最佳阅读效果,您应该有一个索引。一个表格用于存放它被设计为包含的行。随着行数的增加,索引的价值发挥了作用,阅读仍然很活跃。

0

这样说我不知道​​如何回答这个问题。包含100,000条记录的idexed表比没有索引的1,000条表快。

您有什么要求?你有多少数据?一旦你知道这些问题的答案,你可以做出索引和/或分区的决定。

2

我会建议你考虑优化您的数据库设计如下:

  1. 考虑要与数据库完成的任务。你会以很高的价格执行大量插入到单个表格吗?或者你会使用数据执行报告和分析功能?
  2. 确定数据库的用途后,请定义需要存储哪些数据以执行所需的任何功能。
  3. 正常化,直到它伤害。如果您正在执行事务处理(数据库最常用的功能),那么您需要高度规范化的数据库结构。如果您正在执行分析函数,那么您将需要一个更为非规范化的结构,而不必依赖连接来生成报告结果。
  4. 通常情况下,如果你真的对结构进行规范化直到它受到伤害,那么你需要将规范化返回一两步,以使数据结构既规范化又实用。
  5. 如果您未能使用密钥,规范化数据库通常毫无意义。确保每个表都有一个主键定义。不要使用代理键,只会导致你总是看到的东西。考虑任何给定表格中可能存在的自然键。一旦确定每个表都有正确的主键,则需要定义外键引用。建立明确的外键关系而不是依赖隐式定义将会提升性能,为数据提供完整性,并自行记录数据库结构。
  6. 查找表中存在的其他索引。你有一列或一组列,你会经常搜索像用户名和密码字段?索引可以位于单列或多列,因此可以考虑如何查询数据并根据需要创建索引来查询所要查询的值。
0

这是一个非常松散的问题,所以非常宽松的答案:-)

一般来说,如果你做的基础 - 合理正常化,一个明智的主键和运行的设施,工厂的查询 - 那么在今天的硬件上,你会在中小型数据库上获得大多数东西 - 即最大的表中有少于50,000条记录的数据库。

但是,一旦你超过了50k-100k行,这大致对应于rdbms可能受内存约束的点 - 那么除非你有正确的访问路径设置(即索引),然后性能将开始脱落灾难性的。这在数学意义上说 - 在这种情况下,表格尺寸加倍会导致性能下降一到两个数量级,这并不罕见。

因此,很显然,需要注意的关键表格大小会因行的大小,机器内存,活动和其他环境问题而有所不同,因此没有单一答案,但最好注意性能不会随着桌子尺寸而适度地降低并相应地计划。

0

我不同意Cruachan关于“50k - 100k行....大致对应于rdbms可能受内存限制的点”。没有两个额外的数据,这个一揽子声明只是误导。行的大小和可用内存。我目前正在开发一个数据库,以便在源代码文件中查找最长的常见子序列(一种生物信息学)行,并在一个表中达到数百万行,即使VARCHAR字段接近1000,在它变为内存之前限制。因此,在适当的索引和足够的RAM(一个或两个)的情况下,就原始问题而言,最多有75个字节的行,没有理由说建议的表无法保存数千万条记录。

0

适量的数据是应用程序的函数,而不是数据库的函数。通过将表分成多个子表来解决MySQL问题的情况很少,如果这是您问题的意图。

如果您在查询速度慢的特定情况下,通过修改查询或表设计来讨论如何改善这种情况可能会更有用。

相关问题