我有一個表line_item { id: int, price: decimal, quantity: int, [other:...] }
。這張桌子非常大,約。 2800萬行。現在我想獲得排前1000行order by f(price, quantity, [other...])
,f
是一個任意函數。什麼是最好的方式來做到這一點?通過MySQL中的複雜表達式獲取N行的有效方法
我想2個解決方案:
- 使用
order by
和limit
。這種方式可能會很慢,因爲我認爲MySQL爲每行計算結果f
然後對它們進行排序。 - 創建新列以存儲函數
f
的結果。這種方式對擴展性不好,因爲也許我想在不同的上下文中使用多個功能f
(f1
,f2
...)。
我真的希望有第三種解決方案比他們更好。
是的,f()取決於日期值。因此存儲預先計算的值不是一個好方法。在像stackoverflow這樣的大系統中,他們只是在用戶請求時計算這個值,而他們並不關心大問題表。 – Adam 2015-02-27 07:52:03
一個像stackoverflow這樣的大系統設計它的數據庫和它的用戶期望值,所以當用戶在等待時,它不必掃描28M行。 – 2015-02-27 17:27:01
stackoverflow如何做到這一點?我看到了stackoverflow有這樣的排序:排序熱點問題,積極的問題......我認爲他們比我的問題更復雜。你能給我一些建議嗎? – Adam 2015-02-27 19:14:32