2016-08-22 13 views
1

私は約200のテーブルを持つmysql dbを持っています&各テーブルは約40,000のエントリを持っています。 内部結合しようとしていますが、xamp環境では、4時間 ...同様にクラウド上では10分後にエラー500が出ます。 は事前にmysqlは内部結合クエリにスタックしました

Thxを、それを私を助けてください.. は、ここでは、クエリ

SELECT DISTINCT od.io_id, od.io_date, sm.style_code, cm.short_name, od.cust_po, od.mepl_no, od.season, btm.cat_art_no, odd.rev_del_date, od.total_qty, od.shipping_qty, um.short_name, od.order_value_fc, od.order_value_inr, odd.ex_factory_date, od.repeat_order, ot.order_type_name, od.agent_commission AS return_bonus, cm.bonus_discount, cm.other_discount, od.status, il.short_name AS terms, delm.delivery_mode_name, c.short_name AS cur 
FROM orderdetails od 
INNER JOIN bomtrimqty btm ON od.style_id = btm.style_id 
INNER JOIN orderdeliverydetails odd ON od.io_no = odd.io_no 
INNER JOIN ordertype ot ON od.order_type_id = ot.order_type_id 
INNER JOIN stylemaster sm ON od.style_id = sm.style_id 
INNER JOIN customermaster cm ON od.customer = cm.customer_id 
INNER JOIN unitmaster um ON um.unit_id = sm.unit_id 
INNER JOIN deliverymodelist delm ON delm.delivery_mode_id = odd.rev_del_mode 
INNER JOIN incotermlist il ON il.inco_term_id = od.order_type_id 
INNER JOIN currency c ON od.fc_unit = c.currency_id 
ORDER BY od.io_id DESC 

も、私は

GROUP BY od.io_id DESC 
LIMIT 10 

をしようとしたが、運.... mysqlのdoesntのは、すべてのエラーを与えていません!

+4

参加しているすべての列にインデックスがありますか? 'orderdetails.io_id'のインデックス? – Barmar

+0

@Barmarと合意してください - おそらく、いくつかの列に欠落しているインデックスに関連する問題でしょう。 – Cyclonecode

+0

私はスクリプトの時間制限のために500のエラーを提案します...詳細を取得するためにphp error_reportingの設定を確認してください.. – simialbi

答えて

0

は、まず、あなたは、いくつかのインデックスを追加することができます:あなたのパフォーマンスは、今何を言ってん

SELECT 
DISTINCT 
    od.io_id, od.io_date, sm.style_code, cm.short_name, od.cust_po, od.mepl_no, od.season, btm.cat_art_no, odd.rev_del_date, od.total_qty, od.shipping_qty, 
    um.short_name, od.order_value_fc, od.order_value_inr, odd.ex_factory_date, od.repeat_order, ot.order_type_name, od.agent_commission AS return_bonus, 
    cm.bonus_discount, cm.other_discount, od.status, il.short_name AS terms, delm.delivery_mode_name, c.short_name AS cur 
FROM orderdetails od 
INNER JOIN customermaster cm ON od.customer = cm.customer_id 
INNER JOIN stylemaster sm ON od.style_id = sm.style_id 
INNER JOIN unitmaster um ON um.unit_id = sm.unit_id 
INNER JOIN bomtrimqty btm ON od.style_id = btm.style_id 
INNER JOIN orderdeliverydetails odd ON od.io_no = odd.io_no 
INNER JOIN ordertype ot ON od.order_type_id = ot.order_type_id 
INNER JOIN deliverymodelist delm ON delm.delivery_mode_id = odd.rev_del_mode 
INNER JOIN incotermlist il ON il.inco_term_id = od.order_type_id 
INNER JOIN currency c ON od.fc_unit = c.currency_id 
ORDER BY od.io_id DESC 
; 

ALTER TABLE orderdetails ADD INDEX abc (customer, style_id, io_no, order_type_id, fc_unit); 
ALTER TABLE bomtrimqty ADD INDEX abc (style_id); 
ALTER TABLE orderdeliverydetails ADD INDEX abc (io_no, rev_del_mode); 
ALTER TABLE ordertype ADD INDEX abc (order_type_id); 
ALTER TABLE stylemaster ADD INDEX abc (style_id, unit_id); 
ALTER TABLE customermaster ADD INDEX abc (customer_id); 
ALTER TABLE unitmaster ADD INDEX abc (unit_id); 
ALTER TABLE deliverymodelist ADD INDEX abc (delivery_mode_id); 
ALTER TABLE incotermlist ADD INDEX abc (inco_term_id); 
ALTER TABLE currency ADD INDEX abc (currency_id); 

は、あなたが参加する順序を変更できますか?

+0

ALTER --- 'Error Code:1072.キー列' rev_del_mode 'がテーブル' –

+0

に存在しません申し訳ありません... ALTERは正常に動作しますが、ジョインクエリに5時間かかりました。 –

+0

'EXPLAIN SELECT yourQuery'? – Benvorth

0

多くのJOINの代わりにサブクエリを使用し、WHERE条件で使用するフィールドにインデックスを保持してください。この戦略は機能します。

関連する問題