Mysql 没有索引列表的INDEX()的用途是什么?
我有一个查询需要花费很长时间来处理(>60秒): 建议我将use index()添加到此行:Mysql 没有索引列表的INDEX()的用途是什么?,mysql,query-optimization,Mysql,Query Optimization,我有一个查询需要花费很长时间来处理(>60秒): 建议我将use index()添加到此行: FROM st.r r use index() 而且,几乎神奇的是,查询现在需要大约15秒来处理 根据: 从语法上讲,为使用索引省略索引列表是有效的,这意味着“不使用索引”。为强制索引或忽略索引省略索引列表是语法错误 我的问题是,省略索引列表并因此不使用索引,实际上是如何加快查询速度的? 使用索引意味着查看索引(这可能是有效的),
FROM
st.r r use index()
而且,几乎神奇的是,查询现在需要大约15秒来处理
根据:
从语法上讲,为使用索引省略索引列表是有效的,这意味着“不使用索引”。为强制索引或忽略索引省略索引列表是语法错误
我的问题是,省略索引列表并因此不使用索引,实际上是如何加快查询速度的?- 使用索引意味着查看索引(这可能是有效的),然后跳转到数据。请注意,
和数据存储在单独的btree中索引
- 不使用索引可以避免重复
- 有时优化器会做出错误的决定
连接使用表中的信息组合创建一个大的临时表
分组依据
将信息向下收缩DISTINCT
,以避免获得重复的串联值和膨胀的计数
通过使用尽可能简单的查询获取组\u CONCAT
和计数,尝试重写查询。然后执行其余的连接
以获取其余信息。这可能会运行得更快,并且避免了关于使用什么索引(如果有的话)的混淆
混合使用LEFT JOIN
和internal JOIN
会让我头晕目眩,所以我不想尝试建议重写。尝试使用EXPLAIN
查看使用和不使用USE INDEX()
时查询是如何优化的。谢谢,我会尝试的
FROM
st.r r use index()