【问题标题】:Setting Two Indexes In One Database Column在一个数据库列中设置两个索引
【发布时间】:2015-03-05 17:54:46
【问题描述】:

我正在使用 MySQL,但这个问题并不特定于该特定数据库。
我有posts 表和threads 表。
没什么复杂的,当然在 posts 中我有 thread_id 列,它将帖子与拥有它们的线程联系起来。
我想对该列有外键约束(posts 表中的 thread_id),类似于:

  CONSTRAINT `thread_fk` FOREIGN KEY (`thread_id`) REFERENCES `threads` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

所以问题是,在该 thread_id 列上也有第二个索引有多聪明?
像这样:

KEY `thread_idx` (`thread_id`)

或:

 INDEX `thread_idx` (`thread_id`)

FOREIGN KEY 索引是否会在选择时加快速度,使第二个索引变得多余,或者第二个索引对于更快的选择是必要的,或者在一列上有两个索引是个坏主意?

【问题讨论】:

    标签: mysql sql database indexing


    【解决方案1】:

    我不确定您使用的是哪个 RDBMS,但通常外键不会创建索引。为外键中涉及的列创建索引被认为是一种很好的做法。

    但您还应该考虑通过创建此索引来尝试优化的查询。拥有多个包含同一列的索引不一定是坏事。

    【讨论】:

    • 这就是我基本上想知道的。谢谢。
    • 另一件浪费的事情:如果你同时拥有INDEX(a,b)INDEX(a) -- 后者是不必要的。
    • 是的。第一个索引应该已经根据“a”的顺序设置了数据的引用顺序,因此不需要第二个索引,优化器可以将第一个索引用于两个目的.但是,如果您有Index(b,a)Index(a),那么两者兼有会带来性能提升。
    猜你喜欢
    • 2011-01-21
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多