Attualmente stiamo ottimizzando una tabella MySQL (InnoDB) che avrà eventualmente oltre 100 milioni di righe.Indice sulla colonna con il 70% di valori vuoti: utilizza valori nulli o vuoti?
In una colonna, stiamo memorizzando gli indirizzi IP (VARCHAR 45). Abbiamo bisogno di mettere un indice su questa colonna, in quanto dobbiamo essere in grado di recuperare tutte le righe per indirizzo IP specifico.
70% di tutte le righe, tuttavia, non memorizzare un indirizzo IP (vuoto).
La nostra domanda: Dobbiamo memorizzare quei valori vuoti come NULL e quindi CONSENTI NULL su questa colonna (aggiungerà 1 byte per ogni riga). Oppure NON AMMETTERE NULL e memorizziamo i valori vuoti come "(stringa vuota)?
Cosa è meglio per le prestazioni?
Non dobbiamo mai cercare le righe vuote (= '') o null (IS NULL), cercare solo indirizzi IP specifici (= '123.456.789.123').
Aggiornamento: ci sono davvero molte domande su SO che affrontano scenari simili. Tuttavia, alcune risposte sembrano contraddittorie o dicono "dipende". Eseguiremo alcuni test e pubblicheremo i risultati per il nostro scenario specifico qui.
Immagino che la stringa vuota sia leggermente più performante purché utilizzi meno spazio di archiviazione. L'indice sarebbe fondamentalmente lo stesso in entrambi i casi. La soluzione migliore è quella che TEST e verifica è più veloce – Grantly
Possibile duplicato di [MySQL: NULL vs ""] (http://stackoverflow.com/questions/1106258/mysql-null-vs) – Shadow
@Shadow Sì, sembra una domanda simile - ma a prima vista mi sembra che le due risposte più alte dicano il contrario? Uno dice "usa null", l'altro dice "non usare null!". –