Mysql
日期 - 開始和結束與僅開始
在我的數據庫中,我有一個價格表。價格在一段時間內或永久有效,但在給定時間始終存在有效價格。
我想知道你是寧願有一個
starts_at
和ends_at
列,哪裡ends_at
總是等於前一個starts_at
值,還是只starts_at
在給定日期查詢最後一個值?我可以看到擁有
between
功能的好處,但另一方面,更新一行很麻煩,因為它可能會影響ends_at
這里和那裡的日期。
如果您只有數千行,請執行任何操作。如果你有幾百萬行,那麼你會發現“在開始和結束之間”效率低下,沒有
INDEX
辦法讓它快。當每行都有開始和結束時,優化器不知道是否存在重疊範圍。因此,它必須假設您進行的任何查找都可能有多個結果。
ip-ranges展示瞭如何使非重疊範圍有效地工作。(唉,要適應你的應用程序的變化需要一些適應。)