【问题标题】:Why the database become so slow when it have 1 million rows? [closed]为什么数据库有 100 万行时变得如此缓慢? [关闭]
【发布时间】:2019-01-17 20:39:56
【问题描述】:

当我们在一个表中有 100 万行时,使用指定的命令(如 Select * From TBL_USERS Where ID = 20)处理有关此表的任何内容都会变得非常慢,但如果我们处理任何其他表,它会变得更快更容易,这表明缺陷不在数据库中。 这种现象有解释和解决办法吗?

【问题讨论】:

  • "...这种现象"我不确定这里的用词是否正确。
  • select * 带回每一列。它最有可能导致表扫描。 100 万行需要扫描很多(也需要返回)。如果您只列出您需要的列,它会更快(假设您有覆盖索引)。我猜你在那个 ID 上也没有索引......
  • @scsimon 还有另一种方法可以在所有这些行之间获取一些行吗?
  • 您的用户表中有一百万行?这个问题既模糊又广泛。
  • 我不知道你在问什么@MohamedIbrahim。 Read this 并为我们提供 TBL_USERS 的 DDL(创建表,创建索引)脚本。

标签: sql-server vb.net


【解决方案1】:

通常有两件事会影响处理查询所需的时间: SQL Server 必须读取多少行才能满足查询条件。如果必须读取所有行(并且可能将数据所在的页面购买到内存中),这称为扫描并且需要一段时间。如果 SQL Server 有索引并且只需要读取一页或几页,则速度会快得多,称为查找。

查询的第二部分是必须返回多少行(和列)。如果必须通过局域网推送数百万行,这将需要时间。这就是为什么最好避免使用 *(如 select * from tableA)并尝试尽可能使用 where 条件,这将缩小返回的行数。

【讨论】:

  • 谢谢@bejamin moskovits。我如何在 datagridview 中选择这些行,就像页面一样,一页有 100 行,第二个也一样?
  • 听起来您想使用 TSQL 的 OFFSET 和 FETCH NEXT 部分。这是一个很好的使用指南:sqlperformance.com/2015/01/t-sql-queries/… 你也可以研究 tsql 分页。
  • 感谢您提供此信息。
猜你喜欢
  • 2014-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 2021-07-27
相关资源
最近更新 更多