J'ai un tableau avec 1,4 milliard d'enregistrements. La structure du tableau est la suivante:
CREATE TABLE text_page (
text VARCHAR(255),
page_id INT UNSIGNED
) ENGINE=MYISAM DEFAULT CHARSET=ascii
La condition est de créer un index sur la colonne text
.
La taille de la table est d'environ 34G.
J'ai essayé de créer l'index par la déclaration suivante:
ALTER TABLE text_page ADD KEY ix_text (text)
Après 10 heures d'attente, j'ai finalement abandonné cette approche.
Existe-t-il une solution viable à ce problème?
MISE À JOUR : il est peu probable que le tableau soit mis à jour, inséré ou supprimé. La raison pour laquelle créer un index sur la colonne text
est que ce type de requête sql serait fréquemment exécuté:
SELECT page_id FROM text_page WHERE text = ?
MISE À JOUR : J'ai résolu le problème en partitionnant la table.
La table est divisée en 40 pièces sur colonne text
. La création d'index sur la table prend ensuite environ 1 heure.
Il semble que la création d'index MySQL devienne très lente lorsque la taille de la table devient très grande. Et le partitionnement réduit la table en troncs plus petits.
CREATE INDEX
déclaration normale ?