|
6
|
| Kristian Vitozev · 技术社区 · 7 年前 |
|
|
1
5
Bill Karwin建议,如果查询使用的索引的前导列为
我还注意到我们正在做
除了
这表明我们只对返回
似乎是
如果
因为我们不返回除
我将尝试在选择列表中测试相关的子查询,以获取计数,并使用HAVING子句筛选出零计数行。 像这样:
我们希望查询能够有效地使用
以及关于
对于
这种方法(只是
但是 这种方法,用相关的子查询替换联接,最适合于存在 小的 外部查询返回的行数。为执行这些子查询 每一个 由外部查询处理的行。这些子查询必须具有适当的索引。即使有了这些调优,对于大型设备来说仍然有可能出现糟糕的性能。
这仍然会使我们对
如果相关项的计数应该是乘法的乘积,而不是加法,那么我们可以调整查询来实现这一点。(我们必须处理返回零的问题,HAVING子句中的条件需要更改。)
如果没有要求返回相关项的count(),那么我将尝试将相关子查询从选择列表向下移动到
附加说明:附议Rick James关于索引的评论…似乎定义了冗余索引。即
单件列上的索引不是必需的,因为有另一个索引将该列作为前导列。
任何可以有效利用
同样适用于
这个
对于上面的查询,我建议添加一个覆盖索引:
-或者-至少是一个非覆盖索引,其中有两列前导:
|
|
|
2
4
解释显示您正在进行索引扫描(“index”在
这个
有索引吗
如果列表
使用
你的物品有多少
P.S.:当您询问查询优化问题时,应始终包括
|
|
|
3
4
首先:您的查询对字符串内容做了假设,但不应该这样做。可能
不管怎么说,你显示的是一些带有欧洲运输计数的轨道。所以选择轨迹,选择运输计数。您可以在
中的子查询
中的子查询
指标:
有时候,mysql在简单连接上比其他任何连接上都强大,因此可能值得一试,盲目地加入运输记录,然后才知道它是汽车、自行车还是卡车:
|
|
|
4
2
如果我的猜测是正确的
虽然您不能对涉及前导通配符的like做太多索引方面的工作,但是将其拆分为联合查询可以避免评估
|
|
|
5
2
这很有趣…一般来说,我所知道的最佳优化技术是充分利用临时表,这听起来在这里效果很好。因此,首先要创建临时表:
然后查询您需要的结果:
|
|
|
6
2
然后尝试
看看能不能给你一个合适的15分 汽车 . 如果看起来不错,那么将这三个因素结合起来:
注意内部
需要其他索引:
索引
当你拥有
当我看到
我认为这不太可能
重新评论(s) 我对我的配方做了一些实质性的修改。
我的配方有4个
进一步注意,派生表只提供
请详细说明
我必须摆脱
|
|
|
7
2
子查询在连接和过滤掉大量记录时执行得更快。 子查询 跟踪 桌子会过滤掉很多其他不需要的东西 制造 结果是一张小桌子 T 加入。 同样适用于 跟踪项目 我们只感兴趣的桌子 跟踪类型1、2和3 ;创建较小的表 钛 . 如果有很多跟踪对象,您甚至可以在此子查询中添加跟踪对象筛选器。 表的类似方法 汽车、自行车、卡车 他们各自的条件 包含欧洲的文本 帮助我们创建较小的表 C、B、TR 分别。 另外,由于t.id是唯一的,因此删除group by t.id,我们正在该表或结果表上执行内部联接和左联接,因为不需要这样做。 最后,我只选择 每个表中的必需列 这是必要的,这也将减少内存空间和运行时的负载。 希望这有帮助。请让我知道您的反馈和运行统计。 |
|
|
8
0
我不确定它是否有效,在on子句中的每个表(汽车、自行车和卡车)上应用过滤器如何,在连接之前,它应该过滤掉行? |
|
|
Napster Long · 为什么前缀索引比mysql中的索引慢? 8 年前 |