Mysql
mysql查詢性能…必須是更好的方法
我現在有一個疑問,因為沒有更好的詞,很爛。我正在尋找有關編寫此查詢的其他方法的幫助。這是詳細資訊。
我已經建立了一個臨時表,其中包含以下列:
AssignmentSubType
AssignmentValue
OwnerUsergroupID
AssociatedObjectID
我想做的基本要點是找到
AssociatedObjectID
具有相同AssignmentSubType
,AssignmentValue
和OwnerUsergroupID
.AssignmentSubType
這是因為如果我有“重複”(相同的AssignmentValue
、 和OwnerUsergroupID
) ,有大量的 SQL 真的不需要執行。一旦我得到了我的重複列表,我就在其中一個重複上執行下一組 SQL 內容,當我從中獲得資訊時,我將其餘的重複加入最終結果集。範例表數據:
AssignmentSubType | AssignmentValue | OwnerUsergroupID | AssociatedObjectID retailer | Dicks | 1 | 5 retailer | Dicks | 1 | 7 retailer | Dicks | 1 | 9
在此範例中,我只想對 associatedobjecid = 5 進行計算,因為 7 和 9 將完全相同,然後在“結束”處重新加入 7 和 9
我有以下查詢有效,但效率很低
SELECT firstObject, f2.AssociatedObjectID FROM ( SELECT firstObject, dupAss AS dups FROM ( SELECT min(AssociatedObjectID) AS firstObject, group_concat(concat('-',AssociatedObjectID,'-')) AS dupAss FROM ( SELECT * FROM tableFromAbove ) innerRes GROUP BY AssignmentSubType, AssignmentValue, OwnerUsergroupID ) outR ) outR2 LEFT JOIN tableFromAbove f2 ON outR2.dups LIKE concat('%-',f2.AssociatedObjectID,'-%') ORDER BY firstObject
這個查詢會給我一個結果集,如下所示
firstObject | AssociatedObjectID 5 | 7 5 | 9
就像我在這篇文章前面所說的那樣……然後我使用這個結果集來加入來自關聯對象 ID = 5 的其餘查詢的結果。關於如何重組它以使其更有效的任何想法?
這是喬希。嘗試以下
SELECT b.minID, a.AssociatedObjectID FROM tableFromAbove a LEFT JOIN ( SELECT AssociatedObjectID, AssignmentSubType, AssignmentValue, OwnerUsergroupID, MIN(AssociatedObjectID) minID FROM tableFromAbove GROUP BY AssignmentSubType, AssignmentValue, OwnerUsergroupID ) b ON a.AssignmentSubType = b.AssignmentSubType AND a.AssignmentValue = b.AssignmentValue AND a.OwnerUsergroupID = b.OwnerUsergroupID WHERE minID <> a.`AssociatedObjectID`;
這是一個簡化的查詢
首先獲取第
min
AssociatedObjectID
一個對象,然後獲取其他對象。select t3.AssociatedObjectID first_object, t.AssociatedObjectID from test t join ( select t2.AssignmentSubType, t2.AssignmentValue, t2.OwnerUsergroupID, min(t2.AssociatedObjectID) as AssociatedObjectID from test t2 group by t2.AssignmentSubType, t2.AssignmentValue, t2.OwnerUsergroupID ) t3 on t.AssignmentSubType = t3.AssignmentSubType and t.AssignmentValue = t3.AssignmentValue and t.OwnerUsergroupID = t3.OwnerUsergroupID and t.AssociatedObjectID != t3.AssociatedObjectID;