aid*_*dan 5 mysql sql optimization
我有一堆带时间戳的行(使用'datetime'数据类型)
我想选择时间戳在特定月份内的所有行.
该列已编入索引,因此我无法执行MONTH(timestamp)= 3,因为这会使该索引无法使用.
如果我有年和月变量(在perl中),是否有一个可怕的SQL我可以使用如下:
timestamp BETWEEN DATE($year, $month, 0) AND DATE($year, $month, 31);
Run Code Online (Sandbox Code Playgroud)
但更好,实际上有效吗?
Pas*_*TIN 11
我实际上会考虑你提出的想法; 可能差别很小:
select *
from your_table
where date_field >= '2010-01-01'
and date_field < '2010-02-01'
Run Code Online (Sandbox Code Playgroud)
(当然,由您决定使用$year和$month正确)
请注意< '2010-02-01'部分:如果您的日期包含时间,则可能需要考虑这一点.
例如,如果您有一个日期相似的行'2010-01-31 12:53:12',您可能希望选择该行 - 默认情况下,'2010-01-31'意味着'2010-01-31 00:00:00'.
也许这看起来并不"好看"; 但它会起作用; 并使用索引...当我遇到这种问题时,这是我经常使用的一种解决方案.
| 归档时间: |
|
| 查看次数: |
6565 次 |
| 最近记录: |