【问题标题】:Should I index the sorting key field combined with the foreign key, or separately (mysql)?我应该索引排序键字段与外键结合,还是单独(mysql)?
【发布时间】:2012-05-19 11:51:52
【问题描述】:

(这是在 Rails 应用程序中)

给定两个表:

items
id, int(11), primary key
name, varchar(30)

choices
id, int(11), primary key
item_id, int(11), foreign key
identifier, varchar(5)
name, varchar(30)

针对choices的大多数查询将遵循以下原则:

SELECT identifier, name FROM choices WHERE item_id = n ORDER BY identifier;

让我们假设我们都同意索引可以帮助排序性能(我知道我们都没有,没关系,但是对于这个问题,让我们假设)。

选择编制索引以便同时获得搜索和排序优势的最佳方法是:

  • 两个索引,item_ididentifier 各一个

  • item_id,标识符上的一个索引

【问题讨论】:

    标签: mysql ruby-on-rails sorting indexing foreign-keys


    【解决方案1】:

    item_id, identifier 上的 1 个复合索引更适合您的查询,因为这样的索引将被覆盖。

    【讨论】:

    • 感谢您的快速响应。
    【解决方案2】:

    你想要复合索引。对于 2 个单独的索引,mysql 必须在使用索引进行过滤或使用索引进行排序之间做出选择(因为 MySQL 在查询中每个表只使用一个索引)。 More on how MySQL uses indexes when sorting(你的案例就是他们给出的例子之一)。

    【讨论】:

    • 这是我的直觉。我没有看到链接页面。非常感谢。
    【解决方案3】:

    我从不使用rails,但不能使用B+Tree索引item_id和标识符吗? 在那里你会有快速的查询和排序的结果。

    【讨论】:

    • 与应用程序(Rails)相比,这更多的是在数据库中。我相信 MySQL 默认使用 BTree 索引。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 2015-01-13
    • 1970-01-01
    相关资源
    最近更新 更多