2013-07-10 120 views
0

我想執行下面的查詢,但它需要12秒來執行。簡化一個mySQL查詢

SELECT t.*, 
     tt.* 
FROM wp_terms AS t 
     INNER JOIN wp_term_taxonomy AS tt 
       ON t.term_id = tt.term_id 
WHERE tt.taxonomy IN ('category') 
ORDER BY t.name ASC 

是他們的任何方法來簡化查詢,以達到相同的結果與延遲較少。

+1

'wp_terms'和'wp_term_taxonomy'有多少數據?表格是否被索引? –

+2

按優先順序排序:1.在(tt.term_id,tt.category)上提供和索引。 2.在t.name上提供索引。 3.命名你實際想要返回的列。順便說一句,只有按照慣例,我們傾向於在沒有WHERE條件的情況下將WHERE條件加入到表中 - 而不是相反。 – Strawberry

回答

1

您可能會 SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id WHERE tt.taxonomy = 'category' ORDER BY t.name ASC

獲得更好的性能,通過消除IN;但除此之外 - 你的瓶頸將是JOIN。確保你的桌子有適當的索引,如果他們太大了...好吧,這需要時間。

-1

除非必須,否則請勿使用IN

WHERE tt.taxonomy = 'category' 
+0

我想看看如何以任何方式更改查詢執行時間。 – fancyPants

+0

我發現這一點,而環顧四周:http://bugs.mysql.com/bug.php?id=30330但這幾乎意味着相反...編輯:它應該指出,這也是一個錯誤從一個非常舊版。 – SubSevn

+0

或者提問者可以試試看。 – catfood

1

嘗試在term_id上添加索引。

0

您必須添加索引和使用「=」而不是「IN」

0

您是否需要這兩個表中的所有數據,或者您是否選擇t。*和tt。*,因爲它的代碼更快?

您可以將您從陳述中選擇的內容配對。

你也可以通過聲明添加一個組。這可能會減少您的行數並提高性能。