2016-02-20 49 views
1

由於某些原因,以下查詢在我的生產計算機上需要30秒,本地時間少於1秒。我比較了字符編碼,索引等MYSQL在生產中緩慢查詢但未開發

任何想法?

SELECT ct.*, c.first_name as customer_first_name, c.last_name as customer_last_name, c.company_id as company_id 
FROM `communication_pieces` 
JOIN contact c ON c.contact_id = communication_pieces.contact_id 
JOIN customer_transactions ct ON ct.communication_piece_id = communication_pieces.id 
JOIN campaign_iterations ci ON ci.id = communication_pieces.campaign_iteration_id 
WHERE (communication_pieces.campaign_iteration_id = '1273') 
AND (communication_pieces.status NOT IN ("undeliverable","not_delivered","address_rejected")) 
ORDER BY ct.transacted_at ASC LIMIT 2000 OFFSET 0 

我在做解釋時注意到的一件事是生產中的類型是ct表和ref在開發中的索引。我知道層級索引更糟糕,但是這可能是導致差異的原因?

+0

返回多少數據?您的生產機器在網絡拓撲結構中位於何處?機器的規格是什麼?其他用戶是否使用生產機器?表被鎖定?太多未知數,你不可能從SO得到明確的答案。 –

+0

也許您在開發機器上的數據較少。 –

+0

數據庫中的數據完全相同,都返回相同數量的行。 – osman

回答

0

好吧,原來不同版本的MySql選擇索引的方式有所不同。我能夠通過使用rails USE INDEX語法強制索引,並在生產中獲得相同的速度。如果有人遇到類似問題,請添加此處。