Msql Explain查询与本地

时间:2015-12-02 23:20:18

标签: mysql explain

我只是将数据库从测试计算机转储到本地计算机并运行我的查询:

SELECT advert_id,A.category_id,A.subcategory_id,subcategory,model_id,model,make,price,price2,gst,cndtn,currency,photo_id, SUM(S.visits) AS visits
FROM adverts A
LEFT JOIN subcategories SC ON A.subcategory_id = SC.subcategory_id
LEFT JOIN photos P ON P.sale_id = A.advert_id AND P.thumb=1 AND P.sale_type_id=1
LEFT JOIN  ( 
SELECT
entity_id , visits
FROM
sitestats_ga 
WHERE 
entity_type_id=1 AND (date <= DATE_FORMAT(NOW(), "%Y%m%d") && date >= DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 10 DAY), "%Y%m%d"))

) S ON A.advert_id = S.entity_id
WHERE '2015-12-02 06:44:55' >= A.datetime_added AND '2015-12-02 06:44:55' < A.datetime_removed AND A.sold_currency = '' AND (A.subcategory_id = '500' OR A.category_id = '100')
GROUP BY A.advert_id
ORDER BY visits DESC, A.datetime_added DESC
LIMIT 0,12

不幸的是,TEST和LOCAL之间的结果持续时间不同,为了验证这一点,我尝试在mysql中使用EXPLAIN,它们也不同。

在TEST上解释结果 enter image description here

在LOCAL上解释结果 enter image description here

请注意我有一个新的数据库转储到我的本地,这意味着他们有相同的索引,我已经在看到EXPLAIN结果后验证了它。

今天幸运并在PROD上运行查询,结果与我的LOCAL相同,我期待PROD上的TEST应该相同,但我认为数据库存在差异,所以现在我想修复TEST环境。

我如何在这个问题上挖掘更多?我还需要做些什么?

1 个答案:

答案 0 :(得分:1)

有可能发生的事情是因为有时Mysql索引在不同的环境中并不完全相同,即使你拥有相同数量的数据。这完全是因为你如何操纵数据。例如,当您删除数据时,索引号可能不会再次刷新所有数据,因此您可能仍有一些索引指向空数据。但是,当您解释时,仍会扫描此空索引。

您可以在一列上创建一个新索引并开始插入和删除数据。然后重新创建不同的索引名称,有时你会看到不同的索引号。