Mysql
 sql >> Database >  >> RDS >> Mysql

Perché i risultati di una query SQL non tornano nell'ordine previsto?

L'ordine di una query può essere forzato utilizzando una clausola "Ordina per" nell'istruzione. Un database SQL in realtà non comprende l'ordine in cui metti le cose o archivia i dati in un determinato ordine. Ciò significa che devi dire a SQL in quale ordine vuoi gli articoli. Ad esempio:

Select * from Table
  order by column1 desc

Pensa a come consegnare delle cose alla tua amica:le avrà tutte per te in seguito, ma le riporrà da qualche parte nel frattempo. Potrebbe spostarlo mentre tu non stai cercando di fare spazio a qualcos'altro, o potrebbe restituirlo nello stesso ordine in cui gliel'hai dato, ma non le hai detto di tenerlo in ordine, quindi non lo fa .

I database devono essere in grado di spostare le cose in background, quindi il modo in cui sono costruiti non conosce intrinsecamente alcun ordine:devi conoscere l'ordine quando lo dai al database, in modo da poterlo reinserire nel ordine che vuoi più tardi. La clausola order consente a SQL di imporre un ordine sui dati, ma non ne ricorda o ne ha uno da solo.

Punto importante :Anche quando SQL ha restituito gli articoli nell'ordine corretto senza un ordine per istruzione nelle ultime 1 milione di volte, non garantisce che lo farà. Anche se nella tabella esiste un indice cluster, non è garantito che i risultati vengano restituiti nell'ordine previsto. Soprattutto quando le versioni SQL cambiano, non utilizzare esplicitamente una clausola order by può interrompere i programmi che presuppongono che la query sarà nell'ordine desiderato!