我有一個表'客戶'和一個子表'訂單'。MySQL:在這種情況下我需要索引嗎?
對於某個視圖,我需要爲每個客戶顯示最後訂單。
由於您無法在連接中使用LIMIT,因此我首先使用了一個帶有LEFT JOIN,GROUP_CONCAT和SUBSTRING_INDEX的複雜解決方案來獲取最後的訂單,但是這非常緩慢,因爲有數百萬條記錄。
然後,我想只是將最後一個OrderID存儲在客戶表中,每當Orders表發生變化時都會通過觸發器進行更新。然後,我只需在該字段的LastOrderID上執行LEFT JOIN即可。
在這種情況下,LastOrderID字段的索引是否有用?或者不會使用它,因爲源表始終是客戶端,所以在此字段上沒有排序,搜索等操作?
我問的原因是,實際上它有點複雜,我可能實際上需要大約20個這樣的領域。
更新:
我現在查詢是:
SELECT *
FROM Clients AS c
LEFT JOIN Orders AS o ON o.OrderID=c.LastOrderID
會在客戶端上LastOrderID指數提高速度,或者是不是neccessary?
我有一個正常的指標在訂單中的ClientID上。雖然我沒有使用外鍵。這會提高性能,還是外鍵只對數據完整性重要? – Dylan
不是必需的。只要檢查你的基礎知識是否已完成,訂單中的clientID上的索引就不會是等待發生的可伸縮性問題。我建議在ClientID和OrderNumber DESC上都有關鍵字,這樣服務器只需檢查客戶端命令塊的開始,然後找到它找到的第一行。涉及的讀取量較少。 – KingCronus