在mysql中,cast()str_to_date()和varchar更快更好,为什么

时间:2019-07-13 08:45:16

标签: mysql

三个示例,如下所示: 表中有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;

varchar

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;

1 个答案:

答案 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列上的索引。