Domanda
Se ho una tabella con le seguenti colonne come chiave primaria: Username, Title, Start Date
, quindi il database creerà automaticamente un indice su di esso.
- Se voglio selezionare per nome utente e la data di inizio per una query ..... userà l'indice sopra o devo specificare un indice aggiuntivo?
- Se il titolo e la data di inizio si identificano in modo univoco, ma aggiungo anche nome utente alla chiave primaria, questo lo renderebbe un superkey?
Soluzione
1) Se voglio selezionare per nome utente e la data di inizio per una query ..... userà l'indice sopra o devo specificare un indice aggiuntivo?
Hai una condizione complessa, diciamo, in questo modo:
username = 'blah-blah-blah' AND startdate > '01.01.2010'
Se il PK del tuo tavolo definito come:
PRIMARY KEY (Username, Title, StartDate)
Quindi l'indice verrà utilizzato per la prima parte che coinvolge il campo nome utente. I valori di startDate saranno valutati in ordine naturale.
Se si desidera utilizzare l'indice per entrambe le parti della condizione complessa, creare un indice aggiuntivo su StartDate o modificare l'ordine dei campi nel PK:
PRIMARY KEY (Username, StartDate, Title)
2) Se il titolo e la data di inizio si identificano in modo univoco, ma aggiungo anche nome utente alla chiave primaria, questo lo renderebbe un superkey?
È una buona pratica non abusare di un indice unico con campi aggiuntivi. Nel tuo caso, crea PK sul titolo e la data di inizio e quindi (se necessariamente) crea un indice separato sul campo Nome utente.