Sto lavorando a un'applicazione che implementerà un valore esadecimale come chiave aziendale (oltre a un campo di incremento automatico come chiave primaria) simile all'ID URL visualizzato in Gmail . Aggiungerò un vincolo univoco alla colonna e inizialmente pensavo di memorizzare il valore come un bigint per evitare la ricerca in un campo varchar, ma mi chiedevo se è necessario se il campo è unico.Prestazioni MySQL di campo varchar unico vs bigint unico
I join interni verranno eseguiti utilizzando il campo di incremento automatico e il valore esadecimale verrà utilizzato nella clausola where per il filtro.
Che tipo di perdita di prestazioni ci sarebbe nella semplice memorizzazione del valore come varchar (x), o forse un char (x) sul lavoro aggiuntivo nel fare la conversione da e verso hex per memorizzare il valore come numero intero nel database? Vale la complessità aggiuntiva?
Ho eseguito un test rapido su un numero limitato di righe (50k) e ho ottenuto risultati di ricerca simili. Se c'è un grosso problema di prestazioni sarebbe lineare o esponenziale?
Sto utilizzando InnoDB come motore.
Personalmente, cerco davvero di evitare esporre l'utente ai GUID nell'interfaccia utente. Anche una riga dell'URL. Tuttavia, suggerirei di utilizzarli internamente e troncarli * per la visualizzazione * utilizzando una sessione o utilizzare un codice specifico. In questo modo & item = 1 è il primo oggetto che ho mostrato ... Ho tirato il GUID * internamente *. – Godeke