2010-04-06 74 views
1

我有一個巨大的表,主要用於備份和管理目的。唯一重要的記錄是最後插入的記錄。當插入Y時更新記錄X的最佳方法

每次按時間排序命中插入太慢。我想保留一個單獨的表與最後插入的ID。

在PHP中,我現在插入,獲取最後插入的ID,並更新另一個表。

有沒有更有效的方法來做到這一點。

回答

1

(抱歉張貼這作爲一個單獨的答案,是對馬蒂的回答評論有點太長了。)

沒有與觸發相關的小的性能開銷,但如果我沒有記錯它是相當微不足道的正常使用(當然取決於你在做什麼)。大多數情況下,如果您正在執行批量上傳,這隻會是一個問題(在這種情況下,您通常會在任務期間放棄/禁用觸發器)。在我看來,這裏的開銷是非常小的,因爲除了Y上的INSERT,你只能在X上執行一次INSERT/UPDATE。

從本質上講,觸發器會比當前更好地擴展方法,因爲不必執行查找來查找上次更新的記錄,只需執行插入操作即可,然後直接將新記錄的主鍵插入「上次更新」表中。

+0

如果觸發器會直接得到最後插入的ID而不查看,這將是很好的。我沒有批量操作,所以這對我來說不會有問題。然而,我總是害怕使用mysql的構建功能,因爲其中有些功能不能很好地擴展。在這種情況下它確實如此。我會查找觸發器並應用它。 – 2010-04-06 20:30:56

4

您可以使用a trigger在數據庫端執行此操作。

+0

你有什麼想法如何衡量表現明智。我知道像COUNT(*)RAND等函數在大型數據集中表現不佳。你有關於觸發器的任何信息。 – 2010-04-06 09:46:35

0

爲什麼不在該字段上添加索引?

快速搜索和排序正是索引的目的。

在表中更新您自己的'僞索引'相當於重新發明車輪。

此外,添加一個觸發器到數據庫總是感覺非常可疑(如在不明顯)給我!

+0

哦,我的問題有點不同。有不同的羣體。所以我想擁有最後插入的組ID。用這種方法,我需要按照,然後排序。這是低效的。對不起,有點不清楚。但是,如果你只是回答了我的主要問題,這不會有問題。有時候,如果你回答人們的問題,它就會很好,而不是爲他們重新設計新的方法。 – 2010-04-06 11:04:38

+0

你描述了一個問題'我有一個巨大的表 - 只有最後插入的記錄事項',然後你聲明另一個表和一個觸發器插入(和更新大概,然後這是存檔,所以沒有更新)是解決這個問題。 。時間戳上的一個索引可以讓你獲得最後一個速度。 **順便說一句**你期望小組完成什麼?你有多個組需要知道最後一次插入? – lexu 2010-04-06 15:01:12

+0

基本上想知道的是:插入Y時更新記錄X的最佳方法。 – 2010-04-06 20:22:04