在暂存环境中使用我的localhost检索查询结果时遇到奇怪的事件
所以我连接了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
(不要担心查询,我也有一个左连接版本)
每当我在登台环境中运行此查询时,我可以检索结果,例如26k行,同时每当我在我的localhost中运行这个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
我的localhost和staging的数据和结构是相同的。我刚刚更新了它。
你能帮我解决一下发生了什么。我知道这种情况发生在大记录上,但我预计只有26k行,所以没关系。
使用EXPLAIN运行查询:
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
答案 0 :(得分:0)
在这里向专业人士解答我自己的问题。
获取查询结果与登台开发和localhost之间的差异是因为当在localhost中导入sql文件时丢失了索引第一印象是它还将复制索引但是您需要从登台到重新创建整个模式本地主机。
正如Mysql Indexes中所解释的,MySQL可以快速确定在数据文件中间寻找的位置,而无需查看所有数据。
因此,在不使用索引的情况下,它会导致完全扫描,导致无法检索结果。