【问题标题】:Maria DB - Help on IndexMariadb - 索引帮助
【发布时间】:2021-01-15 17:18:30
【问题描述】:

我有以下查询

Select main.display_column, lookup.lookup_column from
main
inner join lookup on main.main_column = lookup.lookup_column
where main.another_column = 123;

创建索引是否足够 main.another_column 和 lookup.lookup_column

或者main.main_column上的索引也需要提高性能?

【问题讨论】:

  • 我认为 main.another_columnlookup.lookup_column 应该做的工作。

标签: mysql indexing mariadb


【解决方案1】:

不,main.main_column 上的索引不需要也不会使用。

设置所有三个索引然后做explain select rest-of-your-query;它只会显示正在使用的两个索引。

如果你有这样的事情:

select main.display_column, lookup.lookup_column
from main
inner join lookup on main.main_column = lookup.lookup_column
where main.another_column >= 123
order by lookup.primarykey

优化器可能会选择反转连接并使用 main.main_column 上的索引,以使记录的顺序正确,但在您的直接情况下,这不应该发生。

【讨论】:

  • 谢谢,我相信相同但无法找到相同的任何文档,如果设法找到,您会分享任何 MariaDB 文档链接。需要它来支持我的观点
  • 设置所有三个索引然后做explain select rest-of-your-query;它只会显示正在使用的两个索引。
【解决方案2】:

如你所问,这些是最佳索引:

main:    INDEX(another_column)   -- takes care of the WHERE
lookup:  INDEX(lookup_column)    -- takes care of the JOIN

可选(可能会更快一点):

main:  INDEX(another_column, main_column, display_column)  -- "covering"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    相关资源
    最近更新 更多