0

ローカルホストを使用してステージング環境でクエリの結果を取得すると、奇妙なイベントが発生します

だから私は 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 行のような結果を取得できます。一方、ローカルホストでこれを 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 

私のローカルホストとステージングのデータと構造は同じです。更新しました。

何が起こっているのか教えてください。これが大きなレコードで発生することは知っていますが、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
4

1 に答える 1

0

ここでプロのガイドで私自身の問題に答えます。

ステージング開発とローカルホストに対してクエリ結果を取得する際の不一致は、sql ファイルがローカルホストにインポートされるときにインデックスが失われるために発生します。最初の印象では、インデックスもコピーされますが、スキーマ全体をステージングからローカルホストに再作成する必要があります。

「 Mysql インデックス」で説明されているように、 MySQLは、すべてのデータを調べることなく、データ ファイルの途中でシークする位置をすばやく決定できます。

したがって、インデックスを使用しないと、フル スキャンが終了し、結果の取得に失敗します。

于 2013-10-01T08:31:04.453 に答える