![]() |
1
4
对于ORDERBY子句,可以进行多少优化是有限制的。有时有帮助的主要方法是按正确的顺序对正确的列集建立索引。因此,对于您的示例,一个(单个,复合)索引位于:
可能会有所帮助,但优化器可能仍然决定最好使用其他索引来处理查询中的筛选条件,然后它将对因此选择的数据本身进行排序。请注意,除非索引以正确的排序顺序提供数据,并且使用索引可以加速整个查询,否则优化器将不会使用它。对于优化器来说,只对其中一列进行排序的索引是有限的好处,而且它通常不会使用这样的索引。 需要考虑的一个问题:
这给了你一个非常直接的分类成本测量。您提到20 ms没有订购,120 ms有订购,因此订购方式的价格适中。下一个问题可能是“在应用程序中,您能超越它的同类产品吗?”。您可能可以这样做,但DBMS中的排序包通常是相当好的优化,您可能需要努力克服它。 |
![]() |
2
0
我怀疑您的索引对您没有任何好处,因为它不是主键,查询选择逻辑(WHERE子句)没有使用它。因为您没有使用索引来选择行,所以最终必须在选择后对结果进行排序。事实上,它不是您的主键,这意味着结果还没有按每月的平均价格订购,这将减少或消除排序时间,因为它们已经被订购了。 一种解决方案是使用一个复合索引,其中包括最有选择的列(计划名称)和排序列(每个月的平均价格)。它仍然需要在选择之后进行排序,但是结果已经由主排序列排序,从而减少了所花费的时间。
您可能还想使用 EXPLAIN 了解查询是如何执行的(如果我的直觉不正确),并相应地调整索引。 |
![]() |
giantjenga · 优化整数向量到二进制向量的转换 7 月前 |
![]() |
Daniel Lobo · 使用约束进行优化 7 月前 |
![]() |
Imyaf · 在什么条件下,在组装时对“if”和“if-else”进行比较? 11 月前 |
![]() |
Sergio · python中大量数字的乘法 1 年前 |
![]() |
Sergey Dev · 临时表与表变量 1 年前 |
![]() |
John · 减少C中的内存消耗++ 1 年前 |