2017-05-15 2 views
0

J'ai une table foo comme ceci:l'indexation d'un Varchar avec MySQL

id | column1 
1 | normalized_string_format1 
2 | normalized_string_format1 
3 | normalized_string_format2 
4 | normalized_string_format3 

Les requêtes sur la table sont toujours:

SELECT * FROM foo WHERE column1 = 'some_string' 

et

INSERT INTO foo (column1) VALUES ('some_string') 

Notez que deux premiers Les lignes de l'exemple ci-dessus ont normalized_string_format1 donc column1 n'est pas unique. Dois-je créer un index dans la colonne 1 afin d'augmenter les performances? dans un tel cas, quel index devrais-je choisir?

+1

Oui, vous devriez probablement indexer 'column1' si vous faites des requêtes' where column1'. Vérifiez la sortie de 'EXPLAIN '. – ceejayoz

Répondre

1

Si la table foo n'est pas triviale, l'ajout d'un index sur la colonne 1 sera probablement bénéfique pour les performances.

Vous pouvez créer un index comme celui-ci:

CREATE INDEX foo_IX1 ON foo (column1) 

Les commandes INSERT/UPDATE/DELETE faire plus de travail, pour maintenir les entrées d'index. Mais l'instruction SELECT avec un prédicat d'égalité sur la colonne 1 pourra utiliser une opération d'analyse de plage d'index, ce qui signifie qu'elle peut éviter d'inspecter chaque ligne retournée dans la table.