繁体   English   中英

在 mysql 中查询范围的最佳方法

[英]best way to query ranges in mysql

我正在设计一个查询,该查询根据表示为范围(特别是年份)的参数从大表中提取行。 在某些情况下,我希望根据 3 个特定值提取行(例如,提取客户编号为 #001、#002 和 #003 的客户记录)。

对于范围问题,我想知道 WHERE 语句背后的条件语法是否比其他语句运行得更快:

在()

之间()

high.range >= 数据 >=low.range

对于 IN() 选项,我可以编写一个脚本,将年份转换为从 low.range 到 high.range 的年份列表。 因此,对于 2000 到 2004 的范围,它将是 IN('2000','2001','2002','2003','2004')。 这将是 MySQL 之外的额外编程步骤,但这对我来说并不难。

我意识到我可以做其他事情来加快速度(比如使用聚集索引),但我只是想看看在 WHERE 语句之后使用的 sql 语法是否有任何区别。

编辑:对不起,我可能误解了你的问题。

我相信between这种情况下是更合适的 function 到in ,但我会进行一些基准测试来确定。


如果您使用的是 TIMESTAMP、DATE 或 DATETIME 列,则可以使用year

where year(column) > 2000 or year(column) < 2005

还有 for monthweekday函数。

http://dev.mysql.com/doc/refman/5.1/en/datetime.html

作品之间的幕后就像 high.range >= data >=low.range

In(condition1, condition2, condition3) 就像 (condition1 or condition2 or condition3)

如果日期数大于 1 或 2,我希望 between 工作得更快。

它类似于 (1000 > 1001) 与 (1000 = 998 或 1000 = 996 或 1000 = 995 等)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM