8
Voglio solo sapere qual è il più veloce.limite vs esiste vs count (*) vs count (id) in MySQL
Quello che sto cercando di fare è solo controllare se i dati sono presenti sul tavolo. Ho usato "LIMIT" per la maggior parte del tempo ma secondo te o se hai delle basi, qual è il più veloce per verificare se i dati sono esistenti.
Esempio:
limite 1:
SELECT ID
FROM TABLE
WHERE ID=1 LIMIT 1;
esiste:
SELECT EXISTS(
SELECT *
FROM TABLE
WHERE ID=1);
count (*):
SELECT (*)
FROM TABLE;
count (ID):
SELECT (ID)
FROM TABLE;"
aggiuntive: sto usando InnoDB.
'SELECT 1 DA
SELECT ID FROM TABLE LIMIT 1 - TABLE è il nome della tabella.: D – Echusen
risposta
Il limite è sempre il più veloce, perché itera una riga del tavolo.
Esistono poche differenze con Limite perché basta aggiungere un'altra istruzione di selezione, possiamo dire che ha la stessa efficienza della prima.
Il conteggio itererà tutta la tabella e conterrà il risultato. Quando si utilizza il conteggio (), per impostazione predefinita, mysql conta la chiave primaria della tabella. Ho effettuato alcune prove di conteggio (id), conteggio (), conteggio (campo) e conteggio (1) in una tabella grande, non c'è una grande differenza. A mio parere, "count" proverà sempre a contare l'indice a meno che il campo che contate non sia un indice, ma molte persone hanno detto che dovremmo usare count (id) piuttosto che usare count (*).
In un piccolo tavolo, i quattro modi funzionano tutti bene. Ma se ti unisci a qualche grande tavolo, contare impiegherà molto molto tempo.
Quindi, in tutto, il tempo utilizzato è COUNT (*)> count (id) >> esiste> limite
fonte
2013-11-15 10:20:50 user2208436
bella spiegazione 'fratello ..: D, io ospite mi limiterò a LIMIT – Echusen
Penso che stiano tutti bene; tranne che rimuoverei le clausole
WHERE ID = 1
. Se si cancella la tabella e si inizia a reinserire, alloraID
1 non esiste. Solo loLIMIT 1
farà il trucco. Personalmente non sono favorevole alle opzioniexists
ecount(*)
. Preferirei locount(ID)
, dato che normalmente avresti un indice suID
quindi mi aspetto che venga eseguito abbastanza velocemente. Per essere sicuri, dovresti cronometrarli (su un tavolo veramente grande) - mi aspetto che vengano fuori qualcosa comeexists
,limit 1
,count(id)
,count(*)
dal più veloce al più lento. (Sono in dubbio per ilexists
- se effettivamente valuta l'interoSELECT *
potrebbe risultare peggiore).fonte
2013-11-15 09:34:25 CompuChip
Penso che il TS voglia controllare se esiste una riga specifica nella tabella, non se esiste una riga, e io asumo '1' è solo un esempio – Martijn
In tal caso non tutte e quattro le affermazioni che ha fornito sono equivalenti, e lui dovrebbe chiarire! – CompuChip
Problemi correlati