Karmaşık bir MySQL sorgusu optimize yardıma mı ihtiyacınız var

0 Cevap php

Aşağıda bu sorgu var. TblOrder, tblItems, tblOrder_archive, tblItem_archive: dahil 4 ana tablolar vardır. Ana tablo sorguları yavaşlatmak için değil Siparişler ve Öğeleri bir kaç ay sonra tabloların arşivlenen sürümleri üzerinde taşındı olsun. (Satış ve trafik gerçekten yüksek). Yani satış rakamları elde etmek, i tablolar (arşiv ve olmayan arşiv) her sette ne gerek seçin .. sendika onları .. sendika üzerinde bir grup yapmak .. sonra sonucu bazı matematik yapmak.

Sorun sıra (sırası zaman aralığı) herhangi önemli miktarda .. çalıştırmak için sorgu için bu kadar uzun sürer ki o zamanlar dışarı. Aklıma tüm tuşları eklendi ve hala süper yavaş çalışıyor olması.

Daha ben daha hızlı bu çalışma için yapabileceğiniz var mı? I farklı şekilde yazabilir miyim? I farklı indeksler kullanabilir miyim?

ya ben ilk seti her tablodan verileri alır bir komut dosyası daha sonra php komut matematik onları birleştirmek için geliyor yazmak gerekir?

Yardımlarınız için teşekkürler.

SELECT
  description_invoice
, supplier
, type
, sum(quantity) AS num_sold
, sum(quantity*wholesale) AS wholesale_price
, sum(quantity*price) AS retail_price
, sum(quantity*price) - sum(quantity*wholesale) AS profit
FROM (
    SELECT
      tblOrder.*
    , tblItem.description_invoice
    , tblItem.type
    , tblItem.product_number
    , tblItem.quantity
    , tblItem.wholesale
    , tblItem.price
    , tblItem.supplier 
    FROM tblOrder USE KEY (finalized), tblItem
    WHERE
      tblItem.order_id = tblOrder.order_id 
     AND
      finalized=1
     AND
      wholesale <> 0
     AND (order_time >= 1251788400 AND order_time <= 1283669999) 

  UNION 

    SELECT
      tblOrder_archive.*
    , tblItem_archive.description_invoice
    , tblItem_archive.type
    , tblItem_archive.product_number
    , tblItem_archive.quantity
    , tblItem_archive.wholesale
    , tblItem_archive.price
    , tblItem_archive.supplier
    FROM tblOrder_archive USE KEY (finalized), tblItem_archive
    WHERE
      tblItem_archive.order_id=tblOrder_archive.order_id
     AND
      finalized=1
     AND
      wholesale <> 0
     AND (order_time >= 1251788400 AND order_time <= 1283669999)
) AS main_table
GROUP BY
  description_invoice
, supplier,type 
ORDER BY profit DESC;

0 Cevap