|
|
1
4
使用当前模式,很难改进此查询。
你已经有了索引
问题是
比…更相似
不是订单关系。如果
如果你总是只需要上衣
|
|
|
2
3
将浮点数作为主键(pk)的一部分是一个杀手。因此,它不应成为任何约束的一部分-唯一键(UK)、外键(FK)等。 要多次提高SQL查询的性能,请尝试如下更改架构:
随着您的测试表像上面一样规范化,我将项目和特性分离到它自己的单独表中,这不仅仅是一个承载每个映射计数的映射表。 如果您现在启动了先前启动的SQL查询,但只做了如下所述的少量修改,那么您应该会看到SQL查询性能有了显著的/巨大的改进。
干杯! |
|
|
3
2
一种优化是将项目本身从自联接中排除:
要进一步加速,请在上创建覆盖索引
|
|
4
0
我会从这个开始…喜欢听到你正在看的表演。我认为你不需要最少的(T1和T2计数)。如果您首先根据id=某个值来限定Where,那么显然您将获得所有这些“特性”。然后通过一个只与匹配的“特性”相关的自连接,你就可以得到一个计数。由于您将其按ID1和ID2细分,因此每个“功能”都将被计数一次。在这个查询的最后,由于我没有明确地排除t2.id等于某个用户值,所以它的计数应该与T1中的功能计数完全相同,并且在它下面的任何内容都将是您的其他最接近的匹配项。 我会确保我有一个关于ID和特性的索引。
结果可能是
|
|
|
5
-1
你能把它敲到只有一张桌子吗?使用子查询,您可能能够避免联接,如果子查询更快、索引并只执行一次,这将是一个胜利。像这样的东西(未经测试)。 <> <代码> >
选择
如果这不起作用,MySQL很难意识到内部选择是常量表,并将为每一行重新执行它们。再次将它们包装在select中会强制进行常量表查找。这是一个黑客:
<代码>
选择BR/>
|
|
|
Bard.Mus · 迁移后的数据库字符集环境 1 年前 |
|
Efannnnnn · 将Id数据存储到任何页面 1 年前 |
|
|
yooooo · 用于在块中删除的存储过程-LOOP未执行 1 年前 |
|
John Beasley · 更新一定数量记录的连续日期 1 年前 |
|
|
ColinM · MySQL以前的结果查询返回不正确的值 1 年前 |
|
Sergey_Z · MySQL只需无条件连接2个表和交叉连接 1 年前 |