繁体   English   中英

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

[英]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 byorder by ,以上查询是否将充分利用索引? 还是有其他更好的解决方案?

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

它正是这样做的-解释了RDBMS如何处理查询。

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

将负值存储在C列中,以便将ORDER BY C DESC, D ASC的查询更改为ORDER BY C ASC, D ASC并使用此索引是一个好主意。 如果没有其他需要其他排序的查询( ASC, ASCDESC, DESCDESC, ASC ,则可以)。

但是我还将B != 0条件更改为B = 1 优化器可能不太聪明,无法将它们标识为相同,并且可能无法正确使用索引(或根本不使用索引)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM