Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Strategia Indici

  1. #1
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290

    Strategia Indici

    Ho una tabella Molto grande in cui le query in alcuni casi mi vanno in timeout.

    La query è fatta così:

    CAMPO_CHIAVE1
    CAMPO_CHIAVE2
    CAMPO3
    CAMPO4
    CAMPO5
    CAMPO6


    Mattiamo che io faccio queste 3 queste sulla tabella

    SELECT * from TABELLA WHERE CAMPO_CHIAVE1 = 'X' AND CAMPO3 = 'Y'

    SELECT * from TABELLA WHERE CAMPO_CHIAVE1 = 'X' AND CAMPO3 = 'Y' AND CAMPO4 = 'Z'

    SELECT * from TABELLA WHERE CAMPO_CHIAVE1 = 'X' AND CAMPO3 = 'Y' AND CAMPO4 = 'Z' AND CAMPO 5= 'Z'

    Se faccio un indici che contiene CAMPO_CHIAVE1, CAMPO3, CAMPO4 ,CAMPO 5 verrà sfruttato anche dalle prime due query? oppure bisogna per forza fare un indice per ogni query per avere un guadagno accettabile?

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    539
    Se faccio un indici che contiene CAMPO_CHIAVE1, CAMPO3, CAMPO4 ,CAMPO 5 verrà sfruttato anche dalle prime due query?

    SI

    potresti avere un degrado delle prestazioni, perché é suggerito posizionare i campi nella chiave secondo il loro frazionamento, quindi prima il campo più frazionato e via via i successivi meno frazionati, cosa non fattibile con un indice così composto

    con un solo indice, in compenso, hai un risparmio di spazio su disco

    va da se che per "
    CAMPO_CHIAVE2", deve essere creato un secondo indice se applicato come "CAMPO_CHIAVE1"

  3. #3

  4. #4
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    SQL server, ma andrà anche su DB2(ovviamente cambia sintassi).
    La cosa che non capisco è che per ora ho provato a fare 1 indice
    Indice1(CAMPO_CHIAVE1, CAMPO3)

    Ma se eseguo la query
    Select * from tabella where CAMPO_CHIAVE1 = 'X' and CAMPO3 = 'Y'

    e l'indice non viene preso in considerazione, viene usata la chiave primaria (che è per default indice cluster)

  5. #5
    hai provato a fare indici singoli per colonna?

  6. #6
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    Si, ma non li caga ugualmente.

    L'unico modo per usarli è fare un indice che includa i valorid ella select
    Cioè

    Se faccio
    SELECT CAMPO_CHIAVE1, CAMPO_CHIAVE2,CAMPO3,CAMPO4 where CAMPO_CHIAVE1 = 'X' and CAMPO3 = 'Y'

    Devo avere un indice fatto così
    Indice1(CAMPO_CHIAVE1, CAMPO3) INCLUDE (AMPO_CHIAVE2,CAMPO4)
    Cioè che includa anche gli altri valori presenti nella select.

    Se faccio
    SELECT * where CAMPO_CHIAVE1 = 'X' and CAMPO3 = 'Y'
    L'indice non viene usato, ma va sulla chiave primaria.

    INDICI MALEDETTI!!!!!

  7. #7

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.