在mysql中的LEFT与DATE_FORMAT

yfjy0ee7  于 2023-02-11  发布在  Mysql
关注(0)|答案(2)|浏览(352)

LEFT或DATE_FORMAT,在mysql的SELECT查询中,哪个更快地重新格式化日期?
我将展示这个问题的一个例子。

    • PERSON表信息**

| 列名|类型|
| - ------|- ------|
| 姓名|变量字符(20)|
| 年份|日期时间|

    • 人员**

| 姓名|年份|
| - ------|- ------|
| 崔维斯|2020年1月1日|
| 山姆|2021年1月1日|
如果执行'SELECTYEARFROMPERSON'查询,可以看到下面的结果。
| 年份|
| - ------|
| 2020年01月01日00时00分|
| 2021年01月01日00时00分|
但我希望结果如下。
| 年份|
| - ------|
| 2020年1月1日|
| 2021年1月1日|
所以,我想使用下面的查询之一.

      • 选择*(年份,10)来自
      • 选择****日期格式**(年份," %Y- % m- % d")

但是,我想知道哪种查询性能更好。
求你了帮帮我。

hmmo2u0o

hmmo2u0o1#

从技术上讲,LEFT()几乎快了四倍,基于我在M1 MacBook上的测试。你的结果可能会有所不同。

mysql> select benchmark(100000000, left(year, 10)) from person;
+--------------------------------------+
| benchmark(100000000, left(year, 10)) |
+--------------------------------------+
|                                    0 |
+--------------------------------------+
1 row in set (1.75 sec)

mysql> select benchmark(100000000, date_format(year, '%Y-%m-%d')) from person;
+-----------------------------------------------------+
| benchmark(100000000, date_format(year, '%Y-%m-%d')) |
+-----------------------------------------------------+
|                                                   0 |
+-----------------------------------------------------+
1 row in set (6.81 sec)

但是,考虑到我必须执行这两个表达式1亿次才能观察到显著的差异,它们都非常快,所以我不会担心它,因为查询的其他部分可能会对性能产生更大的影响。
担心这两个功能哪一个性能更好,就像担心用一个手指还是两个手指去举100公斤的杠铃,哪个更好。

nxowjjhe

nxowjjhe2#

最合适的解决方案是使用year函数,它接受日期数据类型并返回一个数字。
你提到的函数应该是用来操作字符串的,在语义上是不合适的。

相关问题