0

我有这个查询的问题,这个查询的复杂性不好,我很长时间使用这个查询,现在这个数据库有很多行可以通过这种方法进行选择。所有索引都被正确添加。我搜索了一些其他方法来通过日期比较优化这个查询,因为这是这个解决方案的瓶颈。

SELECT (...) FROM table 
WHERE (YEAR(row_add_date) * 10000 + 
       MONTH(row_add_date) * 100 + 
       DAYOFMONTH(row_add_date)) >= (var_0 * 10000 + var_1 * 100 + var_2) and
      (YEAR(row_add_date) * 10000 + 
       MONTH(row_add_date) * 100 + 
       DAYOFMONTH(row_add_date)) <= (var_3 * 10000 + var_4 * 100 + var_5) 

谁能帮我?问候

4

3 回答 3

2

你为什么要这样分开日期?每行函数不能很好地扩展。在我看来,最后的整个日期部分可以替换为:

where row_add_date = '2010-10-27'

即使你想要一个范围,你最好还是直接使用日期。


根据您对声明您正在使用变量的编辑,您应该在条件的右侧进行计算。这是因为这将在查询开始之前完成一次。有了你所拥有的,左侧的计算将每行完成一次,这是一个明确的性能杀手。

于 2010-10-27T14:50:14.803 回答
2

我建议使用内置的 mysql 日期比较。

row_add_date <= '20101027' and row_add_date >= '20101027'

但请注意,这首先是一个奇怪的测试:不只是测试日期等于 10 月 27 日,如下所示:

row_add_date = '20101027'
于 2010-10-27T14:51:04.147 回答
0

我猜那 row_add_date 是 type datetime。如果是这样,您需要将 20101027 转换为 a datetime,并将该列与该列进行比较。

换句话说:

row_add_date >= firstDateTime and row_add_date <= secondDateTime
于 2010-10-27T14:58:30.347 回答