L'ordine per colonna dovrebbe avere indice o no?


35

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?


2
Si prega di inviare la query
RolandoMySQLDBA

Risposte:


26

Sì, MySQL può utilizzare un indice sulle colonne in ORDER BY (a determinate condizioni). Tuttavia, MySQL non può utilizzare un indice per ASC misto , ordine DESC per ( SELECT * FROM foo ORDER BY bar ASC, pants DESC). La condivisione della query e dell'istruzione CREATE TABLE ci aiuterebbero a rispondere alla 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 di 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 non ha senso 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.


3
"MySQL non può usare un indice per ASC, DESC misti" . Riferimento per questo?
ypercubeᵀᴹ

CREATE INDEX idx_foo ON foo(bar ASC, pants DESC);dovrebbe funzionare.
Frank Heikens,

La mia fonte è la documentazione mysql collegata nella mia risposta. Cerca "mix".
Aaron Brown,

3
MySQL analizza asc & Desc in CREATE INDEX, ma le ignora. Gli indici sono sempre memorizzati in ordine crescente. dev.mysql.com/doc/refman/5.5/it/create-index.html
Aaron Brown

1
Nuovo con MySQL 8.0 : Ora è possibile utilizzare una miscela di ASCe DESC se l' INDEXha la stessa miscela.
Rick James,

4

Per chiunque si chieda la risposta in relazione a PostgreSQL, la risposta è sì, verrà utilizzato un indice. Secondo la documentazione di 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 che il planner può utilizzare lo farà, tornando a fare un ordinamento dopo aver recuperato le righe corrispondenti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.