MariaDB虚拟生成列与内置函数,哪个查询速度更快?
两种日期格式转换查询的对比说明
咱们先明确前提:myTable表中的date字段默认存储格式为YYYY-MM-DD,下面两种查询都能得到DD-MM-YYYY格式的日期结果,我来给你拆解它们的差异:
查询1:实时调用date_format函数转换
这种方式是在查询时直接对date字段做格式转换:
select date_format(`date`,'%d-%m-%Y') from myTable;
- 优点:写法直接,不需要预先定义额外字段
- 注意点:因为用函数包装了原字段,即使
date有索引,这个查询也无法利用索引来优化(如果只是单纯查询转换后的格式,性能影响不大,但如果有过滤条件的话会更明显)
查询2:使用虚拟生成列genDate
这里的genDate是一个未建立索引的虚拟生成列,它的预定义规则是:
date_format(date,'%d-%m-%Y') as genDate
查询时直接调用这个列即可:
select `genDate` from myTable;
- 优点:SQL语句更简洁,不用重复编写格式转换的逻辑
- 注意点:因为该列没有索引,当前的查询性能和查询1基本一致;但如果后续需要基于
genDate做过滤、排序等操作,可以给它添加索引,届时性能会比实时调用函数的方式更优
内容的提问来源于stack exchange,提问作者sangnandar
相关产品推荐
相关产品推荐

