【问题标题】:Sql indexes vs full table scanSql 索引与全表扫描
【发布时间】:2011-01-26 22:29:00
【问题描述】:

在编写复杂的 SQL 查询时,我们如何确保使用正确的索引并避免全表扫描?我通过确保我只加入具有索引(主键、唯一键等)的列来做到这一点。够了吗?

【问题讨论】:

    标签: sql sql-execution-plan


    【解决方案1】:

    向数据库询问查询的执行计划,然后从那里继续。

    不要忘记索引出现在 where 子句中的列。

    【讨论】:

      【解决方案2】:

      很难说什么是最好的索引,因为根据情况有不同的策略。关于索引,您现在仍然应该做一些轿跑车的事情。

      1. 索引有时会提高 select 语句的性能,但总是会降低插入和更新的性能。
      2. 要索引表,不必将其作为特定字段的键。此外,现实生活中的索引几乎总是包含几个字段。
      3. 如果您的性能令人满意,请不要为“未来目的”创建任何索引。即使您根本没有索引。
      4. 在调整索引时始终尝试分析执行计划。不要害怕尝试。

          +
      5. 表扫描并不总是坏事。

      这都是我的。

      【讨论】:

        【解决方案3】:

        查看查询的执行计划,了解查询优化器如何认为必须检索事物。该计划通常基于表的统计信息、索引的选择性和连接的顺序。请注意,优化器可以决定执行全表扫描比索引查找“便宜”。

        其他需要寻找的东西:

        • 尽可能避免子查询。

        • 尽量减少“或”谓词的使用
          在where子句中

        【讨论】:

        • 你能澄清你的第二点吗? OR到底有什么问题?
        • 在很多情况下,您需要选择某些字段具有特定值或为空的行。结果是索引不会被使用。过去,我看到 OR 谓词的一些意外行为。例如:A = X OR A = Y 的查询计划可能与 A = Y OR A = X 不同。
        【解决方案4】:

        使用数据库优化顾问(SQL Server)来分析您的查询。它将建议添加必要的索引以调整您的查询性能

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-04-22
          • 1970-01-01
          • 2012-01-31
          • 2011-06-28
          • 1970-01-01
          • 2016-11-24
          • 1970-01-01
          • 2013-10-01
          相关资源
          最近更新 更多