2013-10-01 33 views
0

检索我的临时环境查询的结果时,不要使用我的本地MySQL的 - 差异无法加载查询结果

所以我连接8台我遇到一个奇怪的事件,其制造简单的查询会像这样:

SELECT 
* 
FROM 
tsales, stores, vma_users, tracks, albums, fa_country, exchange_rates, outlets 
WHERE tsales.type = 'T' 
AND stores.outlet_id = exchange_rates.outlet_id 
AND stores.outlet_id = outlets.id 
AND tsales.store_id = exchange_rates.outlet_id 
AND tsales.sale_year = exchange_rates.year 
AND tsales.sale_month = exchange_rates.month 
AND tsales.currency = exchange_rates.currency 
AND tsales.track_id = tracks.id 
AND tracks.album_id = albums.id 
AND tsales.country = fa_country.iso 
AND tsales.account_id = vma_users.id 
AND tsales.account_id = 2129 
AND tsales.sale_year = 2013 
AND tsales.sale_month = 3 
ORDER BY tsales.id 

(不要担心查询,我也有一个左连接的这个版本)

每当我跑在暂存环境中,该查询,我可以检索像结果例如,每当我运行thi时,就有26k行在我的SQL的phpmyadmin本地主机似乎没有发生,我甚至不能得到的结果后,它会显示这样的事情

Fatal error: Maximum execution time of 30 seconds exceeded in C:\wamp\apps\phpmyadmin3.4.10.1\libraries\session.inc.php on line 92 

我的本地和分期的数据和结构是相同的。我刚刚更新了它。

你能帮助我请发生什么事。我知道这种情况发生在大型唱片公司,但我预计只有26千行,所以没关系。

运行与查询说明:

1 SIMPLE outlets  ALL  NULL NULL NULL NULL 46 Using temporary; Using filesort 
1 SIMPLE stores ALL  NULL NULL NULL NULL 55 Using where; Using join buffer 
1 SIMPLE fa_country ALL  NULL NULL NULL NULL 213  Using join buffer 
1 SIMPLE exchange_rates ALL  NULL NULL NULL NULL 1390 Using where; Using join buffer 
1 SIMPLE vma_users ALL  NULL NULL NULL NULL 3957 Using where; Using join buffer 
1 SIMPLE albums ALL  NULL NULL NULL NULL 78458 Using join buffer 
1 SIMPLE tsales ALL  NULL NULL NULL NULL 893483 Using where; Using join buffer 
1 SIMPLE tracks eq_ref PRIMARY,album_id PRIMARY  4 valleyarm_digital.tsales.track_id 1 Using where 
+2

运行'你的本地主机和后结果解释了'这里以文本形式 – peterm

+0

@peterm更新它,请参阅使用EXPLAIN –

+0

你只是没有在列索引您使用的加入和过滤结果的上方表格因此以完整的扫描结束。而在你的分期环境中,你有他们。 – peterm

回答

0

回答我的问题的专业这里的导游。

将查询结果与临时开发和本地主机相比发生差异的原因是,当在本地主机中导入sql文件时失去了索引,它将复制索引,但是需要重新创建整个模式到本地主机。

正如Mysql Indexes中所述,MySQL可以快速确定在数据文件中间寻找的位置,而无需查看所有数据。

因此,如果不使用索引,它会导致无法检索结果的完整扫描。