我有下面的SQL查詢並想知道是否有方法來優化查詢。MySQL上的SQL查詢優化
SELECT * FROM LogEntry WHERE UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(updateTime) > 10;
將增加對錄入指數提高的東西更多的性能可以做,以提高性能
我有下面的SQL查詢並想知道是否有方法來優化查詢。MySQL上的SQL查詢優化
SELECT * FROM LogEntry WHERE UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(updateTime) > 10;
將增加對錄入指數提高的東西更多的性能可以做,以提高性能
是。你需要想辦法去除列上的功能。所以,如果我有邏輯正確的:
SELECT le.*
FROM LogEntry le
WHERE le.updateTime < NOW() - interval 10 second;
這可以再取上LogEntry(updateTime)
指數的優勢。
有很好的理由明確列出返回的列。這隻會對性能產生很小的影響 - 除非行大小相當大。
「不要隱藏函數內部的索引列('updateTime')('UNIX_TIMESTAMP'和'-')」是一個重要的規則是優化。 –
的第一件事我會做的就是刪除您選擇*,然後選擇特定的列
這通常是有用的,但對Gordon的優化來說性能幾乎沒有那麼重要。 –
除了優化請求之外,您還可以考慮對錶進行分區。例如,您可以在updateTime上對錶LogEntry進行分區。如果您的表格中有大量數據,它會大大加快您的請求速度。
注意:要在updateTime上對錶進行分區,updateTime必須是主鍵的一部分。
分區將無濟於事。優化器無法在該表達式中看到「unixTime」。所以,它不能做任何修剪。 –
我的建議是除了Gordon的優化之外,對錶格進行分區 –
在這種情況下,分區對性能沒有幫助。 (此外,由於只有10秒被排除[也許這是一個錯誤],整個表將被掃描。) –
查詢中的錯誤?這隻會排除最近10秒內的行;那幾乎不是全部桌子? –