【问题标题】:Database indexes example数据库索引示例
【发布时间】:2012-08-12 10:30:21
【问题描述】:

关于数据库索引如何工作的一个简单问题。

假设我有一个表 'Student',其中包含 id(primary_key)、name 和 GPA 列。假设我在 id 和其他列上没有索引

现在,如果我使用名称和 GPA(不使用 id)查询记录,它必须搜索所有记录以查找匹配项。这里索引有什么好处?

索引是否只有在查询包含索引列时才有效?

【问题讨论】:

    标签: database indexing database-indexes


    【解决方案1】:

    如果我使用名称和 GPA(不使用 id)查询记录,它必须搜索所有记录以查找匹配项。这里索引有什么好处?

    你是对的。没有任何优势,除了唯一索引也可以强制唯一性

    索引是否只有在查询包含索引列时才有效?

    对于查找匹配的行基本上是肯定的,尽管如果order by 包含索引列,也可以使用索引来帮助排序

    【讨论】:

      【解决方案2】:

      只是为 Bohemian 的答案添加一些示例(并假设是 SQL RDBMS):

      1. Student(name) 上的索引 IX1 将有利于以下查询:

        SELECT * FROM Student WHERE name = 'Bloggs';

      2. 同样,你需要一个索引,比如学生(GPA)上的 IX2

        SELECT * FROM Student WHERE GPA between 1 and 2;

      3. 如果您同时拥有上述索引 IX1 和 IX2,则 SQL 将在以下查询中“选择”两者之一:

        SELECT * FROM Student WHERE name = 'Bloggs' and GPA between 1 and 2;

      4. 仅使用索引中的字段的查询可以完全由索引提供服务(即,不需要 SQL 在内部“加入”回表或集群)。例如以下将完全由 IX1 提供服务,因为名称在索引中。

        SELECT name FROM Student WHERE name = 'Bloggs';

      5. 索引中必须有良好的“选择性”,SQL 才能使用索引。例如如果您的数据库中的每个人都有一个名称“博客”,那么 SQL 很可能会绕过索引并改为扫描表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-31
        • 2010-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-26
        • 1970-01-01
        相关资源
        最近更新 更多