在每个记录中始终具有不同值的列上创建索引(例如唯一列)是否可以提高SELECT的性能?
我知道在名为ie的列上有一个索引。status可以具有3个值(例如PENDING,DONE,FAILED),并且仅在1kk记录中搜索FAILED会更快。但是,如果我在1kk记录中具有唯一的ID(而不是主键),并且在该列上执行SELECT,会发生什么情况?
SQL 服务器
实际上,唯一列上的索引比具有几个值的列上的索引更好。
要了解原因,您需要对数据库如何管理存储有基本的了解。这是一个高级视图。
索引的主要目的是减少查询需要读取的页面数。行本身存储在数据页上。如果没有索引,则需要读取所有数据。
索引是一种数据结构,可以高效地查找特定值。您可以将其视为排序列表,其中使用二进制搜索来标识正确的位置。实际上,这些通常存储在称为b树的结构中(其中“ b”代表“平衡”,而不是“二进制”),但这是实现细节。并且有些索引类型不使用b树。
因此,如果值是唯一的,那么索引将非常有用。无需进行全表扫描,而是可以在索引中有效地查找“行ID”,然后只需要读取一个数据页。
注意,unique约束是使用索引实现的。如果您已将列声明为unique,则不需要附加索引,因为它已经存在。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。