在设计时检查 Table 的性能

Check for performance of a Table at the time of design

在数据库中设计 Table 时,您将如何确定其性能?在创建自己的时候如何保证它的性能会好呢

我假设您使用的是 SQL 数据库。

基本上在设计阶段你是不知道性能的。您需要 table 中的大量数据才能衡量性能。但是有几件事需要考虑,以帮助确保性能尽可能好。

  1. 您希望 table 中有多少行?如果它只有几百行,你不需要考虑太多。但是,如果您期望数亿行,则需要更多地考虑性能,索引是其中的重要组成部分。
  2. table 读或写重吗?如果您只写入它,则不需要索引,因为它们会导致写入速度变慢。但是如果它读起来很重,你需要索引。
  3. 您如何加入其他 table?您需要外键索引。但除此之外,您还需要确保其他 table 具有正确的索引。
  4. 键索引。通常您需要所有主键和外键的索引。
  5. 其他列的索引。如果您只写入 table 并根据主 and/or 外键获取数据,则不应添加其他索引。但是如果你想在数据中搜索你需要为这些列添加索引。如果您想同时搜索多个值,您可能需要添加复合索引。
  6. 尽量减少索引数量。但是出于两个原因,您不想添加到许多索引中。首先,每个索引都会降低写入性能。其次,通常更成问题的是,索引中的数据应该在 RAM 中可用,以最大限度地提高性能。在大 table 上加载大量索引,您可能 运行 内存不足,并且数据库需要从磁盘读取索引,这是一个很大的性能问题。
  7. 尽量减少字符串索引中的数据。您可能只能索引一个子字符串,以最小化索引的大小。但是你需要确保你索引的子字符串是非常独特的,否则你会得到很多点击。或者您可能想添加另一列,其中包含字符串的哈希码,并对其进行索引。但是你只能使用索引来获取完整的字符串,你还需要担心大小写。
  8. 查询。您的查询应尽可能使用索引。但在某些情况下最好不要使用它。示例可以是每月完成一次的报告,它们对时间要求不高。为这些报告添加额外的索引可能会导致上述情况。
  9. 数据库。不同的数据库表现不同。上面提到的大部分内容或多或少都是通用的,但是需要考虑一些特定于数据库的事情。
  10. 测试和理解查询的执行。当您测试查询时,您需要在数据库中拥有大量数据。你预计 table 中有 1000 万行数据吗?用 5000 万行测试它。并了解查询是如何执行的,同样是在数据库中加载大量数据。

如您所见,有很多问题需要考虑。但也有好消息,大多数东西都可以而且应该在需要时更新。只要它至少是第三范式,通常就可以解决问题。