三个示例,如下所示: 表中有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;
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;
答案 0 :(得分:0)
将创建时间直接与有效的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
子句 sargable ,这也许是最大的收获,这将允许MySQL使用CREATE_TIME
列上的索引。