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

Recupera le prime 10 righe senza utilizzare TOP o LIMIT? – Intervista Domanda della settimana #247

Domanda: Recupera le prime 10 righe senza utilizzare TOP o LIMIT?

Risposta: Quando mi è stata posta questa domanda nel mio recente controllo completo dello stato delle prestazioni del database , ho chiesto di nuovo alla persona perché vuole reinventare la ruota. Tuttavia, quando ho ricevuto la sua risposta, ora sono davvero d'accordo con il ragionamento.

Ecco il motivo: Non vogliamo utilizzare TOP o LIMIT poiché in realtà non sono un'implementazione ANSI. Vogliamo recuperare le prime righe in modo tale che possa funzionare su diversi database come SQL Server, MySQL, MariaDB e PostgreSQL.

Tutti i database hanno implementato la propria logica per recuperare le prime righe. SQL Server utilizza TOP parole chiave mentre MySQL, MariaDB e PostgreSQL utilizzano il LIMIT parola chiave per limitare le righe in SQL Server. Ciò presenta sfide uniche per i fornitori di terze parti che scrivono codice che può essere collegato a qualsiasi RDBMS. Devono scrivere le condizioni delle streghe del codice e mantenere due diverse versioni della logica. Tuttavia, se utilizzi il metodo seguente, funzionerà in tutte le versioni recenti dei database relazionali.

SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_DEFINITION
FROM (
SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_DEFINITION,
ROW_NUMBER() OVER (ORDER BY ROUTINE_NAME) AS ROWNUM
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE='PROCEDURE'
) T
WHERE ROWNUM <11;

Funzionerà con tutti i database relazionali conosciuti che ho incontrato. Sebbene amiamo usare spesso TOP e LIMIT, si consiglia di continuare a utilizzare la logica che funziona su più database relazionali.

Ecco altri post del blog che potresti trovare interessanti:

  • SQL SERVER – Disattivazione dell'opzione di configurazione del server Priority Boost su SSMS 18 in poi
  • SQL SERVER – Script di esempio per controllare la frammentazione dell'indice con RowCount
  •  SQL Puzzle – Creazione di schemi e tabelle – Risposte senza eseguire codice
  • Come sapere se l'indice è forzato sulla query? – Intervista Domanda della settimana #246