这可能是一个愚蠢的问题。我有超过30M的记录。
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
中的两个条件,上述查询是否会充分利用索引?或者还有其他更好的解决方案吗?
答案 0 :(得分:4)
答案 1 :(得分:0)
将否定关键字存储在C
列中,以便将ORDER BY C DESC, D ASC
的查询更改为ORDER BY C ASC, D ASC
并使用此索引是一个好主意。如果您没有其他任何需要其他订单的查询(ASC, ASC
或DESC, DESC
或DESC, ASC
,那就没问题。
但我也会将B != 0
条件更改为B = 1
。优化器可能不会那么聪明地将它们识别为相同并且可能无法正确使用索引(或根本不使用索引)。