【发布时间】:2026-01-22 13:05:01
【问题描述】:
我想找到更好的方法,主要是我的数据库中的性能问题。通配符 LIKE,还是范围搜索?
让我们有这张桌子:
| id INT | created DATE | some other columns ... |
如果我想选择某个月份创建的条目,我可以考虑两个选项。一个是在一个范围内搜索的一对比较:
SELECT * FROM my_table WHERE created >= '2014-09-01' AND created < '2014-10-1'
第二个是通配符LIKE:
... WHERE created LIKE '2014-09-%'
我创建了一个包含数百个条目的虚拟表,分为三个月。当我在两种条件下运行选择时(禁用缓存和在列上创建索引),时间大致相同 - 第一个更快,第二个更快。在旧的 Atom CPU 上,时间在 4.0 到 5.0 毫秒之间。
在我看来,从性能的角度来看,我将使用哪一个并不重要。这是正确的吗?还是会有数千行出现差异?
谢谢
【问题讨论】:
-
@Giles 将列
created包装在函数中将导致索引不可用。 -
使用 YEAR() 和 MONTH() 只需要我两个选项的一半时间。所以这似乎是迄今为止最好的选择。 :-)
-
您需要更多行。 @Giles,不过我不会提出比之前的建议更糟糕的替代方案,即范围扫描。
-
我会多看一下日期相关的功能和操作,然后用更多的行来测试它。几万就够了?谢谢大家的回答。
-
我已经在我的系统上测试了这两种方法(大约 700 万行),它们都可以使用索引。
标签: mysql sql wildcard date-range