三个像这样的例子:表有 300,000 个数据,这三个都消耗了 0.3s
铸造函数
SELECT CREATE_TIME from repay_plan
where CREATE_TIME>cast('2019-05-31 00:00:00' as datetime)
ORDER BY REPAY_ID desc limit 10000;
str_to_date功能
SELECT CREATE_TIME from repay_plan
where CREATE_TIME>str_to_date('2019-05-31 00:00:00','%Y-%m-%d %H:%i:%S')
ORDER BY REPAY_ID desc limit 10000;
瓦尔查尔
SELECT CAST(CREATE_TIME AS char) from repay_plan
where CREATE_TIME>'2019-05-31 00:00:00'
ORDER BY REPAY_ID desc limit 10000;
将创建时间直接与有效的MySQL日期时间文本进行比较是迄今为止最理想的做法。 你的第三个版本基本上就是这样做的。 这是您的第三个版本略有修改:
SELECT CREATE_TIME
FROM repay_plan
WHERE CREATE_TIME > '2019-05-31 00:00:00' -- no cast or conversion necessary
ORDER BY REPAY_ID DESC
LIMIT 10000;
此版本将比前两个版本更快,因为它避免了不必要的日期转换函数调用。 它还使WHERE
子句可优化,这可能是最大的收获,这将允许MySQL在CREATE_TIME
列上使用索引。