查询优化 - 性能随时间退化

时间:2018-03-15 15:58:59

标签: sql sql-server query-optimization

我有一个流程,每天会在表格中插入大约100万条记录,而且它已经这样做了一年。然后我有一个连接到结果表的辅助表,并选择按三个月的部分的ID和状态分组的结果计数。一切都进展顺利但现在查询速度非常慢,我似乎无法弄清楚出了什么问题。有人能指出我需要从哪里开始以提升表现。

1 个答案:

答案 0 :(得分:1)

我们可以将表视为磁盘上的大文件。要搜索文件中的某些信息,您需要对其进行扫描。这很贵。

为了提高流程的效率,RDBMS构建了索引 - 通常保存在内存中的数据结构,用于简化特定查询,每行包含在文件中查找行的引用。您拥有的行越多,索引就越大。

在某些时候,索引变得太大而无法容纳到内存中,而且部分内容会被交换到磁盘中。对流行索引的随机访问开始导致大量磁盘IO操作,因为操作系统不断地保存/加载部分索引,这比仅使用内存要慢得多。

做多少取决于数据,有几种方法,但它们背后的共同点是让流行的索引再次适应内存:

  • 你可以添加一些内存
  • 您可以使用较小的数据类型
  • 您可以删除或合并索引并重写查询以便以某种方式使用索引
  • 您可以对数据进行分区并在多台计算机之间分发索引
  • ...

并确保使用索引,因为如果表正在快速增长,整个表的表扫描将很快减慢您的查询速度。