Domanda

Sono abbastanza nuovo nell'uso di MySQL e sto cercando di capire qual è il modo più efficiente per memorizzare gli elementi dell'inventario di un giocatore nel mio database.

Quindi ecco la configurazione:

Esiste una tabella denominata "player" e a ogni giocatore viene assegnato un "playerid" univoco impostato come indice principale del tavolo.

Ogni giocatore può avere fino a 24 oggetti nel proprio inventario e le informazioni su questi oggetti sono memorizzate in una tabella chiamata "player_inventory" . Questa tabella ha i seguenti campi:

playerid, slotid, uid, stack, utilizza, durabilità

"uid" è l'ID dell'elemento e "stack" , "utilizza" e "durabilità" sono solo valori di cui ha bisogno ciascun elemento (lo stesso tipo di elemento in uno slot diverso potrebbe avere una "durabilità" inferiore, ad esempio).

Il problema è che non posso impostare un indice su "playerid" nella tabella dell'inventario perché ci sono fino a 24 voci di slot per giocatore e nessuno degli altri campi è garantito come unico .

Quindi sono preoccupato quando questa tabella ha gli inventari di 10000 giocatori, potrebbero esserci potenzialmente 240.000 voci in questa tabella senza indice quando vado a interrogarla: qualcosa mi dice che potrebbe essere molto lento?

Ho una conoscenza piuttosto limitata su come ottimizzare il mio database, qualsiasi consiglio è molto gradito.

È stato utile?

Soluzione

Gli indici, compreso un indice univoco per la chiave primaria, possono essere definiti su più colonne.

ALTER TABLE player_inventory ADD PRIMARY KEY (playerid, slotid);

Ciò significa che la combinazione di valori in queste due colonne deve essere univoca.Ma un determinato playerid può verificarsi su più righe e un determinato slotid può verificarsi su più righe.

Altri suggerimenti

Potrebbe essere una buona idea avere 3 tabelle.

  1. tblPlayer (idPlayer INT PK NOT NULL AUTO_INCREMENT, nome utente, Password, ecc ...)
  2. tblItemInventory (idItemInventory INT PK NOT NULL AUTO_INCREMENT, idPlayer FK, idItem FK, ..)
  3. tblItem (idItem INT PK NOT NULL AUTO_INCREMENT, Durability, Uses,)

tblItem ha fino a 24 (idItem= 24)

Ci sono due linee di pensiero sull'impostazione di un indice per una tabella come il tuo inventario.Uno implica la creazione di una chiave surrogata, fondamentalmente un indice di incremento automatico per la tabella che non ha alcuna relazione con i dati dell'applicazione.È lì solo per fungere da indice.

L'altro modo in cui puoi imporre un indice è usare la combinazione di playerid e uid.Anche se un giocatore può avere più di una pila dello stesso oggetto (come in Diabo o in MMO), probabilmente puoi usare una combinazione di playerid e slotid come indice.Puoi avere una chiave composta composta da più chiavi in MySQL.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top