當我在另一個post中讀取查詢時,它偶然發現了我。mySQL如何在ORDER BY中處理動態值
就拿下面的查詢(忽略不實用的排序):
SELECT
*
FROM Members
ORDER BY (TIMESTAMPDIFF(FRAC_SECOND, DateCreated , SYSDATE()))
說「成員」表中有一個巨大的行數(或查詢是足夠複雜,它是執行至少十幾毫秒)。 mySQL或其他主流數據庫引擎如何評估「ORDER BY
」中的「SYSDATE()
」?
說查詢需要半秒鐘,「SYSDATE」的微秒(FRAC_SECOND
)更改1000 X 1000 X 0.5 = 500 000次。
我的問題是:
- 是否「SYSDATE」得到固定在 開始查詢執行的或作爲 執行進展它 獲取評估和變化?
- 如果是後者,我可以認爲排序可能混亂嗎?
UPDATE:
我原來的職位採用NOW
動態值的一個例子,它是SYSDATE
現在
它是有道理的,當在ORDER BY中使用時,SYSDATE只評估一次,否則你會有一個移動目標,因爲SYSDATE是確定性的。由於行爲的不確定性,最好在查詢中將日期值設置爲變量之前使用。 – 2009-11-22 03:05:31
@OMG Ponies:根據Heavy Btyes的帖子,SYSDATE在執行過程中進行評估,而不僅僅是一次。你有其他想法嗎? – 2009-11-22 03:40:46