Mysql-这是一个很好的优化查询吗?

时间:2012-03-04 16:51:06

标签: mysql sql database indexing

这可能是一个愚蠢的问题。我有超过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中的两个条件,上述查询是否会充分利用索引?或者还有其他更好的解决方案吗?

2 个答案:

答案 0 :(得分:4)

有一个非常有用的SQL命令,名为EXPLAIN。

确实如此 - 解释了RDBMS如何计算查询。

http://dev.mysql.com/doc/refman/5.0/en/explain.html

答案 1 :(得分:0)

将否定关键字存储在C列中,以便将ORDER BY C DESC, D ASC的查询更改为ORDER BY C ASC, D ASC并使用此索引是一个好主意。如果您没有其他任何需要其他订单的查询(ASC, ASCDESC, DESCDESC, ASC,那就没问题。

但我也会将B != 0条件更改为B = 1。优化器可能不会那么聪明地将它们识别为相同并且可能无法正确使用索引(或根本不使用索引)。