Maison > Article > base de données > mysql permet la création rapide d'index pour des millions de données
Données de test : une table locale d'utilisateurs contient 100 millions d'enregistrements. Aucun index n'est ajouté au champ correspondant avant de créer cette table, vous devez donc ajouter un index à la table à ce moment. Cependant, en raison de la grande quantité de données, l'ajout d'index risque de ne pas réussir. Après avoir réfléchi à plusieurs façons, j'ai finalement réussi à creuser le trou.
Démarrer le travail de préparation,
structure de la table utilisateur :
CREATE TABLE `users` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL, `add_time` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=1000001 DEFAULT CHARSET=latin1;
Apparaît lors de la tentative d'utilisation dans outfile pour exporter des données dans navicat Erreur :
select * from users into outfile 'users.txt'; //users.txt文件在mysql的dat
Comme indiqué ci-dessous :
J'ai vérifié en ligne qu'il s'agit de l'autorisation définie par MySQL. Vous pouvez utiliser
afficher les variables comme '%secure%' ; Vérifiez quelle est la valeur actuelle de secure-file-priv ?Vous pouvez voir que le paramètre secure-file-priv est utilisé pour limiter LOAD DATA, SELECT .. . OUTFILE et LOAD_FILE() Quel répertoire spécifié vers lequel transférer. Lorsque la valeur de secure_file_priv est nulle, cela signifie que mysqld ne peut pas importer et exporter. Lorsque la valeur de secure_file_priv est /tmp/, cela signifie que l'importation et l'exportation de mysqld ne peuvent avoir lieu que dans le répertoire /tmp/. La valeur de secure_file_priv n'a pas de valeur spécifique, cela signifie qu'il n'y a aucune restriction sur l'importation/exportation de mysqld Les données exportées doivent être le chemin spécifié de cette valeur avant. il peut être exporté. La valeur par défaut peut être NULL (ce que je regarde ici est null ) signifie que l'exportation est interdite, vous devez donc la définir Puisque j'utilise le fichier my.ini sous l'étude php, Chemin d'installation de mysql, définissez le chemin : Remarque : ajoutez des guillemets doubles au nom du chemin" "L'erreur reste la même après le redémarrage...
Essayez donc de modifier [mysqld] dans mysql.cnf pour ajouter secure_file_priv =
Le résultat final est le suivant :
Redémarrez MySQL à nouveau
Puis exécutez :
truncate users;
创建索引:
create index name using BTREE on users(name);
索引的方式有:BTREE、RTREE、HASH、FULLTEXT、SPATIAL,这里不再赘述他们的区别,网上有很多关于这块的介绍啦
导入文件到相应表users。
load data infile 'users.txt' into table users;
此方式在write 锁住情况下,或对外服务暂停时使用,线上不可能直接这样玩了。
相关推荐:
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!