|
1
4
对于ORDERBY子句,可以进行多少优化是有限制的。有时有帮助的主要方法是按正确的顺序对正确的列集建立索引。因此,对于您的示例,一个(单个,复合)索引位于:
可能会有所帮助,但优化器可能仍然决定最好使用其他索引来处理查询中的筛选条件,然后它将对因此选择的数据本身进行排序。请注意,除非索引以正确的排序顺序提供数据,并且使用索引可以加速整个查询,否则优化器将不会使用它。对于优化器来说,只对其中一列进行排序的索引是有限的好处,而且它通常不会使用这样的索引。 需要考虑的一个问题:
这给了你一个非常直接的分类成本测量。您提到20 ms没有订购,120 ms有订购,因此订购方式的价格适中。下一个问题可能是“在应用程序中,您能超越它的同类产品吗?”。您可能可以这样做,但DBMS中的排序包通常是相当好的优化,您可能需要努力克服它。 |
|
|
2
0
我怀疑您的索引对您没有任何好处,因为它不是主键,查询选择逻辑(WHERE子句)没有使用它。因为您没有使用索引来选择行,所以最终必须在选择后对结果进行排序。事实上,它不是您的主键,这意味着结果还没有按每月的平均价格订购,这将减少或消除排序时间,因为它们已经被订购了。 一种解决方案是使用一个复合索引,其中包括最有选择的列(计划名称)和排序列(每个月的平均价格)。它仍然需要在选择之后进行排序,但是结果已经由主排序列排序,从而减少了所花费的时间。
您可能还想使用 EXPLAIN 了解查询是如何执行的(如果我的直觉不正确),并相应地调整索引。 |
|
|
Bard.Mus · 迁移后的数据库字符集环境 1 年前 |
|
Efannnnnn · 将Id数据存储到任何页面 1 年前 |
|
|
yooooo · 用于在块中删除的存储过程-LOOP未执行 1 年前 |
|
John Beasley · 更新一定数量记录的连续日期 1 年前 |
|
|
ColinM · MySQL以前的结果查询返回不正确的值 1 年前 |
|
Sergey_Z · MySQL只需无条件连接2个表和交叉连接 1 年前 |