0
我有一組(MySQL)表,如下所示。我需要根據匹配的型號/序列號檢索問題單的列表,以及任一設備表中匹配設備的編號。MySQL:提高子選擇查詢的效率
注意,型號/序列號組合應該是在兩個設備表中的唯一,但是型號/序列號輸入框是自由的形式,所以有用戶可以輸入相同的型號/序列兩次的可能性。在這種情況下,檢索哪個設備單元並不重要,但是僅應按每張票返回結果,因爲我們顯示的是票證列表,而不是設備。
'門票'[工單表]
- ID [指數]
- 模型[設備型號]
- 串行[設備序列號]
- ...等
user_equipment [用戶設備表]
- ID [指數]
- 模型[設備型號]
- 串行[設備序列號]
- ...等
site_equipment [現場設備]
- ID [指數]
- 型號[設備型號]
- 系列[設備序列號]
- ...等
目前我使用子查詢返回的用戶和現場設備的ID,但性能很差:
SELECT tickets.*, ... other tables/columns here,
(SELECT id FROM user_equipment WHERE model = tickets.model AND serial = tickets.serial LIMIT 1) as user_equipment_id,
(SELECT id FROM site_equipment WHERE model = tickets.model AND serial = site_equipment.serial LIMIT 1) as site_equipment_id
FROM
tickets
... other joins here
WHERE ...
HAVING ...
ORDER BY ...
LIMIT ...
我將不勝感激任何改善此查詢性能的建議。不幸的是,由於許多其他依賴關係,更改表結構不是一種選擇。
謝謝!
所以你說現有的查詢是好的,有沒有更好的方式來實現這一目標? –
好吧,我添加了索引,並且我被性能改進所打動!最初耗時5-8秒的查詢現在需要0.5秒!謝謝! –
爲了澄清,這是編寫這種查詢類型的最佳方法嗎?我看到一些使用LEFT JOIN和GROUP BY語句的人,但是這增加了一些複雜性和問題,因爲我需要返回多個連接表中的許多/所有字段。 –