开发者社区> 问答> 正文

始终具有不同值的列上的索引值得吗?

在每个记录中始终具有不同值的列上创建索引(例如唯一列)是否可以提高SELECT的性能?

我知道在名为ie的列上有一个索引。status可以具有3个值(例如PENDING,DONE,FAILED),并且仅在1kk记录中搜索FAILED会更快。但是,如果我在1kk记录中具有唯一的ID(而不是主键),并且在该列上执行SELECT,会发生什么情况?

SQL 服务器

展开
收起
祖安文状元 2020-01-05 14:49:36 608 0
1 条回答
写回答
取消 提交回答
  • 实际上,唯一列上的索引比具有几个值的列上的索引更好。

    要了解原因,您需要对数据库如何管理存储有基本的了解。这是一个高级视图。

    索引的主要目的是减少查询需要读取的页面数。行本身存储在数据页上。如果没有索引,则需要读取所有数据。

    索引是一种数据结构,可以高效地查找特定值。您可以将其视为排序列表,其中使用二进制搜索来标识正确的位置。实际上,这些通常存储在称为b树的结构中(其中“ b”代表“平衡”,而不是“二进制”),但这是实现细节。并且有些索引类型不使用b树。

    因此,如果值是唯一的,那么索引将非常有用。无需进行全表扫描,而是可以在索引中有效地查找“行ID”,然后只需要读取一个数据页。

    注意,unique约束是使用索引实现的。如果您已将列声明为unique,则不需要附加索引,因为它已经存在。

    2020-01-05 14:49:41
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载