Mysql 没有索引列表的INDEX()的用途是什么?

Mysql 没有索引列表的INDEX()的用途是什么?,mysql,query-optimization,Mysql,Query Optimization,我有一个查询需要花费很长时间来处理(>60秒): 建议我将use index()添加到此行: FROM st.r r use index() 而且,几乎神奇的是,查询现在需要大约15秒来处理 根据: 从语法上讲,为使用索引省略索引列表是有效的,这意味着“不使用索引”。为强制索引或忽略索引省略索引列表是语法错误 我的问题是,省略索引列表并因此不使用索引,实际上是如何加快查询速度的? 使用索引意味着查看索引(这可能是有效的),

我有一个查询需要花费很长时间来处理(>60秒):

建议我将use index()添加到此行:

                FROM
                    st.r r use index()
而且,几乎神奇的是,查询现在需要大约15秒来处理

根据:

从语法上讲,为使用索引省略索引列表是有效的,这意味着“不使用索引”。为强制索引或忽略索引省略索引列表是语法错误

我的问题是,省略索引列表并因此不使用索引,实际上是如何加快查询速度的?

  • 使用索引意味着查看索引(这可能是有效的),然后跳转到数据。请注意,
    索引
    和数据存储在单独的btree中
  • 不使用索引可以避免重复
  • 有时优化器会做出错误的决定
您的查询可能遇到“爆炸内爆”:

  • 连接使用表中的信息组合创建一个大的临时表
  • 分组依据
    将信息向下收缩
  • 同时,您必须执行
    DISTINCT
    ,以避免获得重复的串联值和膨胀的
    计数

    通过使用尽可能简单的查询获取
    组\u CONCAT
    计数,尝试重写查询。然后执行其余的
    连接
    以获取其余信息。这可能会运行得更快,并且避免了关于使用什么索引(如果有的话)的混淆


    混合使用
    LEFT JOIN
    internal JOIN
    会让我头晕目眩,所以我不想尝试建议重写。

    尝试使用
    EXPLAIN
    查看使用和不使用
    USE INDEX()
    时查询是如何优化的。谢谢,我会尝试的
                    FROM
                        st.r r use index()