【问题标题】:Is there a benefit to index mysql column if I always have different value in every row?如果我在每一行中总是有不同的值,那么索引 mysql 列是否有好处?
【发布时间】:2015-08-06 12:58:14
【问题描述】:

问题是针对像timestamp 这样的行,每行中总是存储不同的值。

我已经通过 stackoverflow 搜索并阅读了索引,但如果没有一个值等于另一个值,我不了解利润。因此,索引基数将等于行数。利润是多少?

【问题讨论】:

  • 取决于您是否根据时间戳(通常是范围)过滤行。如果是这样,那么是的,索引将运行良好。值越多样化,索引的效果就越好。
  • 每行中的不同值会产生出色的索引选择性,这通常是一件好事。

标签: mysql database-design indexing


【解决方案1】:

索引是键值和检索指针之间的映射。如果使用索引的策略看起来是最优的,那么 DBMS 会在查询期间使用索引。
如果索引永远不会被使用,那么它是无用的。

索引可以加速基于单个键值的查找,或基于键值范围(取决于索引类型),或者在查询只需要键的情况下允许仅检索索引。根据桌子的大小和其他各种因素,加速可以低至 2 比 1,也可高达 100 比 1。

如果您的时间戳字段从未在查询的 WHERE 子句或 ON 子句中使用,那么您可能最好不使用索引。选择索引的艺术远不止于此,但这是一个开始。

【讨论】:

    【解决方案2】:

    这种列实际上是索引的绝佳候选者,最好是唯一的。

    表是未排序的数据集,因此在不了解表的情况下,数据库必须按顺序遍历整个表才能找到您要查找的行(O(n) 复杂度,其中 n 是数字行数)。

    索引本质上是一棵以排序方式存储值的树,它允许数据库智能地找到您要查找的行 (O(log n))。此外,使索引唯一告诉数据库每个时间戳值只能有一行,因此一旦检索到一行,数据库就可以停止搜索更多。

    假设您根据时间戳搜索行,这种索引的性能优势应该是显着的。

    【讨论】:

    • 除非数据要求不允许两个值相同,否则我不会将其设为唯一索引。
    猜你喜欢
    • 2014-12-26
    • 2010-09-13
    • 2022-11-27
    • 1970-01-01
    • 2011-02-19
    • 2014-03-01
    • 2021-02-25
    • 2018-11-11
    • 1970-01-01
    相关资源
    最近更新 更多