【问题标题】:Does the speed of the query depend on the number of rows in the table?查询的速度是否取决于表中的行数?
【发布时间】:2010-03-29 11:28:20
【问题描述】:

假设我有这个查询:

select * from table1 r where r.x = 5

此查询的速度是否取决于table1 中存在的行数?

【问题讨论】:

    标签: sql sql-server database performance


    【解决方案1】:

    影响查询速度的因素有很多,其中之一可能是行数。

    其他包括:

    • 索引策略(如果索引列“x”,您会看到比未索引时更好的性能)
    • 服务器负载
    • 数据缓存 - 执行查询后,数据将被添加到数据缓存中。因此,由于数据来自内存而不是磁盘,因此后续重新运行会更快。直到从缓存中删除数据为止
    • 执行计划缓存 - 在较小程度上。首次执行查询后,SQL Server 提出的执行计划将被缓存一段时间,以供将来执行重复使用。
    • 服务器硬件
    • 您编写查询的方式(通常是导致性能不佳的最大因素之一!)。例如使用游标而不是基于集合的操作来写东西

    对于表中有大量行的数据库,通常需要考虑分区(SQL Server 2005 及更高版本,企业版有内置支持)。这是为了将数据拆分成更小的单元。通常,更小的单元 = 更小的表 = 更小的索引 = 更好的性能。

    【讨论】:

      【解决方案2】:

      是的,而且可能非常重要。

      如果有 1 亿行,SQL Server 必须遍历每一行,看看是否匹配。 与 10 行相比,这需要更多时间。

      您可能希望在“x”列上建立索引,在这种情况下,sql server 可能会检查索引而不是遍历所有行 - 这可能会明显更快,因为 sql server 甚至可能不需要检查所有行索引中的值。

      另一方面,如果有 1 亿行匹配 x = 5,则它比 10 行慢。

      【讨论】:

        【解决方案3】:

        几乎总是是的。真正的问题是:随着表大小的增加,查询变慢的速度是多少?答案是:如果 r.x 被索引,则不会很多,如果没有,则很多。

        【讨论】:

          【解决方案4】:

          不是行(当然在一定程度上)本身,而是数据量(列)会使查询变慢。数据也需要从后端传输到前端。

          【讨论】:

            【解决方案5】:

            答案是肯定的。但不是唯一的因素。 如果您进行了适当的优化和调整,性能下降将可以忽略不计 主要性能因素

            • 索引集群或无集群
            • 数据缓存
            • 表分区
            • 执行计划缓存
            • 数据分布
            • 硬件规格

            还有一些其他因素,但主要考虑这些因素。 甚至您设计架构的方式也会对性能产生影响。

            【讨论】:

              【解决方案6】:

              您应该假设您的查询始终取决于行数。事实上,对于更复杂的查询,您应该假设最坏的情况(线性或O(N) 对于您提供的示例)和指数。有一些特定于数据库的手册充满了技巧,可以帮助您避免最坏的情况,但 SQL 本身是一种语言,并没有指定如何执行查询。相反,数据库实现决定如何执行任何给定的查询:如果您在数据库中索引了一个列或一组列,那么您将获得O(log(N)) 的简单查找性能;如果系统有有效的查询缓存,你可能会得到O(1) 响应。这是一篇很好的介绍性文章:High scalability: SQL and computational complexity

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2016-03-31
                • 2010-11-22
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-03-19
                • 2021-05-01
                相关资源
                最近更新 更多