我们以lastName
为例。
假设您的数据库中没有重复的姓氏(偶然,不是因为unique
),对此lastName
列编制索引会有什么好处吗?
用于搜索的查询类似于SELECT * IN t WHERE lastName='Smith'
。
如果列中的每个条目都是唯一的,那么索引如何产生影响?不管它是否都要搜索每个条目?
抱歉,我只是在学习索引,我真的很想了解它。
感谢。
答案 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?越高,索引对该列的影响就越大。