Mysql
如何通過連接提高性能以從 Wordpress wp_usermeta 創建 VIEW
經過大量搜尋,我終於能夠創建一個 SQL 查詢來檢索 Wordpress 使用者元數據。現在的問題是,性能太差了,30 分鐘後甚至都沒有顯示結果。
Wordpress 將數據儲存在 3 列中:
user_id
、meta_key
、meta_value
。所以每個條目都有一行。我需要的是每個使用者一行,每個使用者都有meta_key
自己的列。換句話說,我有這個:
user_id | meta_key | meta_value 1|Name |David 1|Lastname |Brown
但我需要這個:
user_id|Name |Lastname 1|David|Brown
我對此的做法是:
select m1.user_id, m1.meta_value as Vorname_M, m2.meta_value as Nachname_M,m3.meta_value as Adresse_M from wp_usermeta m1 join wp_usermeta m2 on (m1.user_id = m2.user_id and m2.meta_key = 'nachname') join wp_usermeta m3 on (m2.user_id = m3.user_id and m3.meta_key = 'adress') where m1.meta_key = 'vorname'
有 5 個連接它仍然可以工作,但已經需要 4 秒。總而言之,實際上有 17 個連接,此時它沒有向我顯示任何內容。
我在 phpMyAdmin 中執行查詢,並希望從結果中創建一個 VIEW。
現在實際的問題是:如何提高查詢的性能,或者如何重寫它?我盡力而為,但實際上我是 SQL 的初學者。
MySql 版本:5.5
在這種情況下,您不需要將表連接到自身。如果你只查詢一次,那麼它會更快。
SELECT user_id, MAX(CASE WHEN meta_key='vorname' THEN meta_value ELSE null END) Vorname_M, MAX(CASE WHEN meta_key='nachname' THEN meta_value ELSE null END) Nachname_M, MAX(CASE WHEN meta_key='adress' THEN meta_value ELSE null END) Adresse_M FROM wp_usermeta GROUP BY user_id
如果
usermeta
是類似的東西postmeta
,它的索引效率很低。有關提高效率的指南,請參閱此內容。