window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = finestra if (w.LeadBooster) { console.warn('LeadBooster esiste già') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Sviluppo del software Ruby on Rails. Indici v2 - The Codest
The Codest
  • Chi siamo
  • Servizi
    • Sviluppo di software
      • Sviluppo Frontend
      • Sviluppo backend
    • Staff Augmentation
      • Sviluppatori Frontend
      • Sviluppatori backend
      • Ingegneri dei dati
      • Ingegneri del cloud
      • Ingegneri QA
      • Altro
    • Consulenza
      • Audit e consulenza
  • Industrie
    • Fintech e banche
    • E-commerce
    • Adtech
    • Tecnologia della salute
    • Produzione
    • Logistica
    • Automotive
    • IOT
  • Valore per
    • CEO
    • CTO
    • Responsabile della consegna
  • Il nostro team
  • Case Studies
  • Sapere come
    • Blog
    • Incontri
    • Webinar
    • Risorse
Carriera Contattate
  • Chi siamo
  • Servizi
    • Sviluppo di software
      • Sviluppo Frontend
      • Sviluppo backend
    • Staff Augmentation
      • Sviluppatori Frontend
      • Sviluppatori backend
      • Ingegneri dei dati
      • Ingegneri del cloud
      • Ingegneri QA
      • Altro
    • Consulenza
      • Audit e consulenza
  • Valore per
    • CEO
    • CTO
    • Responsabile della consegna
  • Il nostro team
  • Case Studies
  • Sapere come
    • Blog
    • Incontri
    • Webinar
    • Risorse
Carriera Contattate
Freccia indietro TORNA INDIETRO
2020-06-16
Sviluppo di software

Sviluppo del software Ruby on Rails. Indici v2

The Codest

Damian Watroba

Software Engineer

Quando si lavora con il framework Ruby on Rails, di solito si ha a che fare con database relazionali come MySQL o PostgreSQL. Quando si definiscono le migrazioni utilizzando le Active Record Migrations, ci si imbatte nei cosiddetti indici, ma spesso i principianti non capiscono bene gli indici e quali vantaggi apportino.

Quando si lavora con il framework Ruby on Rails, di solito si ha a che fare con database relazionali come MySQL o PostgreSQL. Quando si definiscono le migrazioni utilizzando le Active Record Migrations, ci si imbatte nei cosiddetti indici, ma spesso i principianti non capiscono bene gli indici e quali vantaggi apportino.

In questo post vorrei spiegare cosa sono gli indici, a cosa servono e presentare alcune buone pratiche su come utilizzarli.

Database

Esistono molti motori di database e tra i più diffusi ci sono i già citati MySQL, PostgreSQL, Oracle o Microsoft SQL Server. Sono tutti database relazionali, il che significa che tutti i dati sono collegati tra loro e memorizzati in tabelle. Ogni riga della tabella è chiamata record e ogni record ha un proprio identificatore univoco (id). È possibile verificare la classifica dei motori di database più diffusi su https://db-engines.com/en/ranking. Vi si trovano anche alcuni database non relazionali, come MongoDB.

Creazione di un indice

Le tabelle dei nostri database possono avere da poche a diverse decine - in casi estremi, fino a diverse centinaia - di colonne. Tenete presente che ogni tabella può avere un numero illimitato di righe. Questo numero non deriva direttamente dalla struttura del database e dobbiamo sempre supporre che il numero di record aumenterà progressivamente e, di conseguenza, il nostro database crescerà. Le ipotesi iniziali e le query scritte nelle applicazioni esistenti possono essere ottime per un numero piccolo o medio di record, ma col tempo, quando arrivano più dati, la comunicazione dell'applicazione con il database cessa di essere efficiente.

Il ruolo del programmatore è quello di scrivere query per recuperare alcuni dati dalla tabella o dalle tabelle, ma il modo ottimale di elaborare la query dipende dal motore del database. Ricordate che i motori di database caricano i dati dal disco alla memoria e poi li scansionano. Ciò significa che se molti utenti eseguono operazioni complesse contemporaneamente, molti di loro dovranno aspettare il loro turno a causa della mancanza di risorse per implementare le loro ricerche. Ecco perché gli indici rilevanti sono così importanti.

Wiki: Indice - una struttura di dati che aumenta la velocità di esecuzione delle operazioni di ricerca su una tabella.

Per ogni indice è necessario definire le chiavi (per una o più colonne) che verranno utilizzate per cercare i record nella tabella. I dati nell'indice saranno ordinati in base alla chiave definita in precedenza, il che velocizzerà notevolmente la ricerca dei dati nella tabella. L'esempio più semplice, tratto dalla vita quotidiana, è quello di un elenco telefonico in cui le persone sono ordinate per nome e cognome. Si può dire che in questo caso il nostro indice sarà il nome e il cognome.

Come scegliere la migliore chiave indice? Non è difficile: basta ricordare alcune regole. Creare un indice basato su colonne che:

- sarà spesso utilizzato nelle nostre richieste (DOVE),

- in combinazione tra loro danno un valore unico (cioè che indica esattamente una riga),

- saranno utilizzate come colonne di collegamento (JOIN),

- forniscono le chiavi più selettive, cioè quelle che restituiscono il minor numero di righe quando si scrive una query.

Se sappiamo già quali chiavi saranno ottimali per la nostra tabella, possiamo anche chiederci di quanti indici abbiamo bisogno. In questo caso, è meglio conoscere le query che faranno riferimento alla nostra tabella già in fase di progettazione.

Creiamo indici per le query specifiche che appariranno, ma non scriviamoli per ogni colonna. Gli indici, come le tabelle, devono essere memorizzati da qualche parte, quindi quando creiamo tabelle con un indice per ogni colonna, dobbiamo tenere conto che la quantità di spazio utilizzato può aumentare in modo significativo.

Creare un indice univoco

Un'altra questione a cui dobbiamo pensare è l'unicità. Vale la pena spendere cinque minuti in più per pensare se il nostro indice è davvero unico. In questo modo, diciamo all'ottimizzatore di query che non deve aspettarsi duplicati nella query. Ad esempio, gli indirizzi e-mail:

frozenstringliteral: true

classe CreateUsers < ActiveRecord::Migration[6.0]
def modifica
createtable :users do |t|
t.string :email, null: false
fine
addindex :users, :email, unique: true
fine
fine

Sull'esempio del motore PostgreSQL, mostrerò la differenza di velocità di interrogazione sulla colonna email con un indice univoco e senza indice.

1. È possibile utilizzare un campione codice sul proprio database per poter testare l'esempio che segue. Per prima cosa, creiamo una tabella vuota con una sola colonna:

 CREARE TABELLA utenti (
   email varchar
 );

2. Generiamo 10.000 record per il test:

 DO $
   INIZIO PER i IN 1..10000 LOOP
     INSERT INTO users values((select 'user' || i || '@example.com'));
   FINE LOOP; FINE;
 $;

Utilizzeremo EXPLAIN ANALYZE per verificare la velocità di elaborazione della nostra query quando vogliamo trovare un utente specifico nel database.

EXPLAIN ANALYZE SELECT email FROM users WHERE email = 'user890example.com';

La nostra query ha forzato l'iterazione intorno all'intera tabella alla ricerca del record che ci interessa.

Questo processo è chiamato scansione sequenziale. In questo caso, la lettura dell'intera tabella e il filtraggio di determinate righe è il modo migliore per eseguire il lavoro.

PostgreSQL filtrerà le righe non necessarie e restituirà semplicemente quelle che ci interessano. Questa è davvero la cosa migliore da fare in questo caso. La scansione sequenziale non è sempre negativa, ci sono casi in cui la scansione sequenziale è ideale.

4. È il momento di verificare la query già eseguita sulla tabella che ha l'indice UNIQUE. Impostiamo l'indice ed eseguiamo la query.

 EATE UNIQUE INDEX index_email su users(email);
 EXPLAIN ANALYZE SELECT email FROM users WHERE email = 'user890example.com';

Questa volta PostgreSQL ha sfruttato la scansione dell'indice perché tutte le colonne necessarie sono già presenti nell'indice.

La selezione di poche righe è molto efficiente se si utilizza l'indice. Tuttavia, se si selezionano più dati, la scansione dell'indice e della tabella richiederà troppo tempo.

Sintesi

Come si può notare, il tempo di esecuzione di una query su una colonna con indice è molto più breve (nell'esempio mostrato si passa da 1,267 ms a 0,111 ms, quindi ben 91,24%!). La differenza più importante è il modo in cui PostgreSQL cerca il record che ci interessa. Nel primo caso, il motore del database doveva cercare il record che ci interessava nell'intera tabella. Nel secondo, invece, la struttura dell'indice è ordinata e unica, quindi il motore sapeva dove si trovava il record, il che ha accelerato notevolmente i tempi di elaborazione della query.

Nel caso di database di grandi dimensioni e di query molto complesse, gli indici impostati correttamente possono accelerare in modo significativo il lavoro dell'applicazione senza la necessità di aumentare la velocità della macchina su cui si effettua la ricerca nel database.

È bene ricordare che la creazione di indici su ogni colonna non è una buona pratica. Gli indici stabiliti velocizzano il lavoro dell'ottimizzatore nella ricerca dei dati di interesse, ma allo stesso tempo rallentano l'inserimento di nuovi dati e l'aggiornamento di quelli esistenti.

Per saperne di più:

– Avete bisogno di utilizzare i comuni framework JS nella vostra applicazione Rails? Stimulus.js può essere una valida alternativa

– È tempo di una nuova realtà. L'era del lavoro a distanza è iniziata un mese fa

– Sviluppo di applicazioni web: Perché vale la pena scegliere la tecnologia Ruby on Rails?

Articoli correlati

Sviluppo di software

Costruire applicazioni web a prova di futuro: le intuizioni del team di esperti di The Codest

Scoprite come The Codest eccelle nella creazione di applicazioni web scalabili e interattive con tecnologie all'avanguardia, offrendo esperienze utente senza soluzione di continuità su tutte le piattaforme. Scoprite come la nostra esperienza favorisce la trasformazione digitale e il business...

IL CANCRO
Sviluppo di software

Le 10 principali aziende di sviluppo software con sede in Lettonia

Scoprite le migliori aziende di sviluppo software della Lettonia e le loro soluzioni innovative nel nostro ultimo articolo. Scoprite come questi leader tecnologici possono aiutarvi a migliorare la vostra attività.

thecodest
Soluzioni per aziende e scaleup

Essenziali di sviluppo software Java: Guida all'outsourcing di successo

Esplorate questa guida essenziale sullo sviluppo di software Java con successo outsourcing per migliorare l'efficienza, accedere alle competenze e guidare il successo del progetto con The Codest.

thecodest
Sviluppo di software

La guida definitiva all'outsourcing in Polonia

L'aumento di outsourcing in Polonia è guidato dai progressi economici, educativi e tecnologici, che favoriscono la crescita dell'IT e un clima favorevole alle imprese.

IlCodesto
Soluzioni per aziende e scaleup

Guida completa agli strumenti e alle tecniche di audit IT

Gli audit IT garantiscono sistemi sicuri, efficienti e conformi. Per saperne di più sulla loro importanza, leggete l'articolo completo.

The Codest
Jakub Jakubowicz CTO e cofondatore

Iscrivetevi alla nostra knowledge base e rimanete aggiornati sulle competenze del settore IT.

    Chi siamo

    The Codest - Società internazionale di sviluppo software con centri tecnologici in Polonia.

    Regno Unito - Sede centrale

    • Ufficio 303B, 182-184 High Street North E6 2JA
      Londra, Inghilterra

    Polonia - Poli tecnologici locali

    • Parco uffici Fabryczna, Aleja
      Pokoju 18, 31-564 Cracovia
    • Ambasciata del cervello, Konstruktorska
      11, 02-673 Varsavia, Polonia

      The Codest

    • Casa
    • Chi siamo
    • Servizi
    • Case Studies
    • Sapere come
    • Carriera
    • Dizionario

      Servizi

    • Consulenza
    • Sviluppo di software
    • Sviluppo backend
    • Sviluppo Frontend
    • Staff Augmentation
    • Sviluppatori backend
    • Ingegneri del cloud
    • Ingegneri dei dati
    • Altro
    • Ingegneri QA

      Risorse

    • Fatti e miti sulla collaborazione con un partner esterno per lo sviluppo di software
    • Dagli Stati Uniti all'Europa: Perché le startup americane decidono di trasferirsi in Europa
    • Confronto tra gli hub di sviluppo Tech Offshore: Tech Offshore Europa (Polonia), ASEAN (Filippine), Eurasia (Turchia)
    • Quali sono le principali sfide di CTO e CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Condizioni di utilizzo del sito web

    Copyright © 2025 di The Codest. Tutti i diritti riservati.

    it_ITItalian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek it_ITItalian