我遇到了一個查詢「太長」。該查詢在10個左右表格之間有50多個左連接。爲了簡要概述數據庫模型,連接的表格是存儲特定數據類型(例如:date_fields,integer_fields,text_fields等)的數據的表格,每個表格都有一個值列,一個「數據字段」和一個票證號碼。該查詢是基於「票證」與其「數據字段」之間的關聯表以編程方式構建的。優化在同一個表上使用多個左連接的查詢
的加入語句看起來類似以下內容:
...FROM tickets t
LEFT JOIN ticket_text_fields t001 ON(t.id=t001.ticket_id AND t001.textfield_id=7)
...
LEFT JOIN ticket_date_fields t056 ON(t.id=t056.ticket_id AND t056.datafield_id=434)
在使用上查詢說明顯示如下:
1 SIMPLE t ref idx_dataset_id idx_dataset_id 5 const 2871 Using where; Using temporary; Using filesort
1 SIMPLE t001 ref idx_ticket_id,idx_datafield_id idx_ticket_id 5 t.id 5
...
1 SIMPLE t056 ref idx_ticket_id,idx_datafield_id idx_ticket_id 5 t.id 8
我可以採取什麼方向來調整這個查詢?所有指標似乎都已到位。也許應該減少t表(門票)行號(2871)。剩下多少個連接太多?數據字段表是否應該只加入一次,然後爲每個數據查詢所需的數據?
偉大的迴應比爾!我不能在不改變模式的情況下想到一個好的解決方案,所以我不斷重新加載這個問題,看看別人會說些什麼。我喜歡你的解決方案。 – 2010-10-11 17:32:09
同意。感謝您的信息和解決方案! – 2010-10-12 17:29:56