2013-03-16 58 views
0

從XML文件導入到一個WordPress數據庫。我將城鎮和地點作爲每個帖子的元值進行導入。如何優化這個WordPress的mysql查詢?

我沒有城鎮和位置的predefind名單,所以我需要得到所有位置(容易的事情)和(這裏的具有1M的問題)得到這些位置中的所有城鎮

查詢,我現在是:

SELECT t1.meta_value 
FROM wp_postmeta t1 
INNER JOIN wp_postmeta t2 ON (t1.post_id = t2.post_id) 
WHERE t2.meta_key = '_prop_loc' 
    AND t2.meta_value="Málaga" 
    AND t1.meta_key = '_prop_town' 
GROUP BY t1.meta_value 

例如,如果我試圖讓所有的城鎮在「馬拉加」位置我結束使用此查詢。測試它在本地主機查詢運行

showing records 0 - 29 (101 total, total time 1.3289 seg) 

如果我拿出組的時間減少,但當然我得到重複的行。如果我使用與ASC訂單不同的選擇,則時間再次增加。

我也想有結果排序的,但超過一秒鐘的查詢是不正常

wp_postmeta表:

CREATE TABLE `wp_postmeta` (
    `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
    `post_id` bigint(20) unsigned NOT NULL DEFAULT '0', 
    `meta_key` varchar(255) DEFAULT NULL, 
    `meta_value` longtext, 
    PRIMARY KEY   (`meta_id`), 
      KEY `post_id` (`post_id`), 
      KEY `meta_key` (`meta_key`) 
) ENGINE=*** DEFAULT CHARSET=utf8; 
+0

或許有用:HTTP:/ /www.wikyblog.com/AmanKing/GROUP_BY_in_MySQL_does_implicit_ordering http://stackoverflow.com/questions/5231907/order-by-null-in-mysql – biziclop 2013-03-16 23:07:03

+0

但我想結果排序。使用group by給了我正確的順序。使用「select distinc」+ order by給我正確的順序。這兩種方式都很慢(查詢1s + – chifliiiii 2013-03-16 23:22:39

+0

你在桌上有什麼索引? – 2013-03-16 23:36:41

回答

1

我假設你已經沒有添加任何更多的索引默認的WP設計。

您可以在(meta_key, meta_value, post_id)

,一個在(meta_key, post_id, meta_value)添加索引。

更新meta_valuetext列,所以這不是一個選項。你可以嘗試在該列使第一部分指標不包括它的第二個索引:

ALTER TABLE wp_postmeta 
    ADD INDEX meta_key__meta_value__post_id__IX 
    (meta_key, meta_value(20), post_id), 
    ADD INDEX meta_key__post_id__IX 
    (meta_key, post_id) ; 

你也可以試試這個重寫查詢:

SELECT t1.meta_value 
FROM wp_postmeta t1 
WHERE t1.meta_key = '_prop_town' 
    AND EXISTS 
     (SELECT * 
     FROM wp_postmeta t2 
     WHERE t2.meta_key = '_prop_loc' 
      AND t2.meta_value = "Málaga" 
      AND t2.post_id = t1.post_id 
    ) 
GROUP BY t1.meta_value ; 
+0

添加索引做到了。但是我的查詢似乎執行速度更快我的查詢是0.0415 seg。您的查詢在0.0461 seg。感謝您的幫助 – chifliiiii 2013-03-17 00:14:07

+0

Nice,保持查詢更高效如果您從我的重寫中刪除GROUP BY,重複仍然出現? – 2013-03-17 01:22:47

+0

是的,他們出現了 – chifliiiii 2013-03-17 15:08:07