it-swarm.it

L'ordine per colonna dovrebbe avere indice o no?

Ho aggiunto indici alla tabella che vengono utilizzati per la ricerca dei risultati. Sto mostrando i risultati per ordine ASC o DESC. Quindi quella colonna dovrebbe avere un indice o no? Ho altri 2 indici su quella tabella. In che modo influiranno le prestazioni creando o non indicizzando quella colonna?

38
Somnath Muluk

Sì, MySQL può utilizzare un indice sulle colonne in ORDER BY (a determinate condizioni). Tuttavia, MySQL non può utilizzare un indice per misto ASC, DESC ordina per (SELECT * FROM foo ORDER BY bar ASC, pants DESC). La condivisione della query e dell'istruzione CREATE TABLE ci aiuterebbero a rispondere alla tua domanda in modo più specifico.

Per suggerimenti su come ottimizzare le clausole ORDER BY: http://dev.mysql.com/doc/refman/5.1/en/order-by-optimization.html

Modifica 21/01/2012 8:53

Ci sono state domande sulla fonte della mia affermazione sull'uso di un indice con ASC/DESC misti in ORDER BY. Dalla documentazione ORDER BY Optimization :

In alcuni casi, MySQL non può utilizzare gli indici per risolvere ORDER BY, sebbene utilizzi comunque gli indici per trovare le righe che corrispondono alla clausola WHERE. Questi casi includono quanto segue:

...

Mescoli ASC e DESC:

SELEZIONA * DA t1 ORDINA PER key_part1 DESC, key_part2 ASC;

...

Inoltre, la parola chiave DESC è senza significato in CREATE INDEX

Una specifica index_col_name può terminare con ASC o DESC. Queste parole chiave sono consentite per future estensioni per specificare l'archiviazione del valore dell'indice crescente o decrescente. Attualmente, vengono analizzati ma ignorati; i valori dell'indice sono sempre memorizzati in ordine crescente.

29
Aaron Brown

Per chiunque si chieda la risposta in relazione a PostgreSQL, la risposta è sì, verrà utilizzato un indice. Come da documentazione PostgreSQL il pianificatore di query "prenderà in considerazione la soddisfazione di una specifica ORDER BY o scansionando un indice disponibile corrispondente alla specifica o scansionando la tabella in ordine fisico e facendo un ordinamento esplicito". Ciò significa che se esiste un indice utilizzabile dal planner, lo farà, tornando a fare un ordinamento dopo aver recuperato le righe corrispondenti.

6
douglasr