2010-11-26 8 views
1

Qe: 1)Mysql requête qui prend du temps

select 
    a.finishproductid 
from 
    tblt_invoiceorderitems a, tblm_invoiceorder b 
where 
    b.invoiceorderdate <= 'Current Date' and 
    a.invoiceorderid = b.invoiceorderid 

--- il a plus de 16k dossiers.

Qe: 2)

select jobcardid, stockcode 
from tblm_finishproduct 
where productionentrydate <= 'Current Date' 

--- il a aussi plus de 16k Record.

Maintenant, je veux à partir de la deuxième requête pas dans la première requête.

select jobcardid, stockcode 
from 
    tblm_finishproduct 
where 
    productionentrydate <= 'CurrrntDate' and 
    finishproductid not in 
    (
    select 
     a.finishproductid 
    from 
     tblt_invoiceorderitems a, tblm_invoiceorder b 
    where 
     b.invoiceorderdate <= 'CurrrntDate' and 
     a.invoiceorderid = b.invoiceorderid 
); 

Maintenant, son temps de prendre un

+0

Veuillez utiliser des blocs de code pour le SQL. – robert

Répondre

0

Cela ne répond pas à votre question, mais vous ne devrait pas utiliser a.invoiceorderid = b.invoiceorderid dans votre où clause-- essayez cette requête à la place du premier. Natural join est plus efficace que de faire un produit croisé de la table entière et de sélectionner uniquement les lignes qui correspondent.

select a.finishproductid 
from tblt_invoiceorderitems a 
natural join tblm_invoiceorder b 
where b.invoiceorderdate <= 'Current Date' 
0

supprimer de la non:

b.invoiceorderdate <= 'CurrrntDate' and 
0

le résultat de "sélectionner Table1, Table2, Table3" maby est 16k^3^2 ou 16k. Vous devez créer une "jointure interne" ou une "jointure" à l'aide de la clé primaire pour personnaliser la recherche.

Voir en ligne

Questions connexes