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 mysqldL'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 :
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!