MySql - 索引自然唯一的列是否有任何好处?

时间:2015-01-21 01:20:57

标签: mysql indexing

我们以lastName为例。

假设您的数据库中没有重复的姓氏(偶然,不是因为unique),对此lastName列编制索引会有什么好处吗?

用于搜索的查询类似于SELECT * IN t WHERE lastName='Smith'

如果列中的每个条目都是唯一的,那么索引如何产生影响?不管它是否都要搜索每个条目?

抱歉,我只是在学习索引,我真的很想了解它。

感谢。

2 个答案:

答案 0 :(得分:1)

是的,即使列值是唯一的,索引也有好处。在索引中,值不仅是唯一的,而且它们也以树结构组织,允许您搜索具有O(log N)复杂度的行。

维基百科上有一篇很棒的文章:Database Index

  

...   数据以任意顺序存在,但指定了逻辑顺序   按指数。数据行可以遍布整个表格   无论索引列或表达式的值如何。该   非聚集索引树包含按排序顺序的索引键   包含指向记录的指针的索引的叶级别(页面   和页面组织引擎中数据页面中的行号;行   文件组织引擎中的偏移量。)

     

在非聚集索引中

     

行的物理顺序与索引顺序不同。该   索引列通常是JOIN中使用的非主键列,   WHERE和ORDER BY子句。可以有多个非群集   数据库表上的索引。   ...   请考虑以下SQL语句:   SELECT first_name FROM people WHERE last_name =' Smith&#39 ;;   在没有索引的情况下处理此语句   数据库软件必须查看每一行的last_name列   在表中(这称为全表扫描)。用索引了   数据库简单地遵循B树数据结构直到Smith   已找到条目;这比计算成本低得多   全表扫描。

答案 1 :(得分:0)

一般来说,列中的唯一值越多,或者基数What is cardinality in MySQL?越高,索引对该列的影响就越大。