簡體   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