我有兩個大表,其中兩個表都有一個venue_id
。它不是外鍵,因爲它們是兩個獨立的值。它們分別是:通過MySQL使用WHERE在兩個表中進行大表查詢
table: activity_retail
columns: activity_id, venue_id, created_at
indexes: activity_id (PRIMARY), (activity_id, venue_id) INDEX
table: activity
columns: activity_id, item_id, venue_id, created_at
indexes: activity_id (PRIMARY), (created_at) INDEX
我想這樣做在兩個人的查詢,到venue_id
每個表等於X
所有活動。所以,我會做:
SELECT * from activity
LEFT JOIN activity_retail on activity_retail.activity_id = activity.activity_id
WHERE activity_retail.venue_id = X or activity.venue_id = X
ORDER BY activity_retail.created_at desc LIMIT 0, 25
我可能還需要爲分頁做這個查詢:
的情況是activity_id
在activity_retail
可能不存在,這是一個可選字段,這樣我就可以」 t做內連接,必須是左連接。
這裏是EXPLAIN
:
1 PRIMARY activity index ix_ivi_created created_at 8 NULL 25 Using where
1 PRIMARY activity_retail eq_ref PRIMARY PRIMARY 4 activity.activity_id 1
雖然這是小的查詢(根據EXPLAIN
),它需要很長的時間來執行,並在EXTRAS
區域不使用任何。
任何關於如何使這個工作正常的建議 - 基本上聲明跨兩個表的WHERE
條件? AND
工作得很好,但我們在這裏需要OR
。
你可以提供一個描述在桌子上,所以我們可以看到你的索引? – ghenghy
另外,你說,但你的「其中venue_id每個表等於X」查詢得到的地方venue_id等於任何一個表中的X既不是 – ghenghy
某些樣本數據和期望的結果也會有幫助 – ghenghy