[英]Mysql- Is this a good optimised query?
这可能是一个愚蠢的问题。 我有超过3000万条记录。
Table 1
Column A(int) - Column B(Boolean) - Column C(int) - Column D(DateTime)
我将对(A,B,C,D)有一个综合索引。
以下是查询:
Select * from table1 where A=12 and B!=0 ORDER BY C DESC ,D ASC.
由于无法Order by C DESC and D ASC
。 每次插入记录时,我都会通过将C乘以(-1)来进行反向排序。
现在,我尝试执行的查询将是:
Select * from table1 where A=12 and B!=0 ORDER BY C ASC ,D ASC.
考虑where
子句中的两个条件以及order by
的order by
,以上查询是否将充分利用索引? 还是有其他更好的解决方案?
有一个非常有用的SQL命令,称为EXPLAIN。
它正是这样做的-解释了RDBMS如何处理查询。
将负值存储在C
列中,以便将ORDER BY C DESC, D ASC
的查询更改为ORDER BY C ASC, D ASC
并使用此索引是一个好主意。 如果没有其他需要其他排序的查询( ASC, ASC
或DESC, DESC
或DESC, ASC
,则可以)。
但是我还将B != 0
条件更改为B = 1
。 优化器可能不太聪明,无法将它们标识为相同,并且可能无法正确使用索引(或根本不使用索引)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.