Maison  >  Article  >  base de données  >  mysql permet la création rapide d'index pour des millions de données

mysql permet la création rapide d'index pour des millions de données

小云云
小云云original
2018-03-27 15:17:062605parcourir

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...

Ce paramètre n'est pas défini dans mysql.cnf, ce qui signifie que ce paramètre est la valeur par défaut null

Essayez donc de modifier [mysqld] dans mysql.cnf pour ajouter secure_file_priv =

Le résultat final est le suivant :

Redémarrez MySQL à nouveau


Vous pouvez voir users.txt généré dans le répertoire de la base de données de test au même niveau. . .

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 锁住情况下,或对外服务暂停时使用,线上不可能直接这样玩了。

相关推荐:

MySQL创建索引和删除索引的方法

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn