Heim  >  Artikel  >  Datenbank  >  MySQL ermöglicht die schnelle Erstellung von Indizes für Millionen von Daten

MySQL ermöglicht die schnelle Erstellung von Indizes für Millionen von Daten

小云云
小云云Original
2018-03-27 15:17:062605Durchsuche

Testdaten: Ein lokaler Tabellenbenutzer verfügt über 100 Millionen Datensätze. Vor dem Erstellen dieser Tabelle wurde dem entsprechenden Feld kein Index hinzugefügt, daher müssen Sie zu diesem Zeitpunkt einen Index zur Tabelle hinzufügen. Aufgrund der großen Datenmenge ist das Hinzufügen des Index jedoch möglicherweise nicht erfolgreich. Nachdem ich über viele Möglichkeiten nachgedacht hatte, gelang es mir schließlich, die Lücke zu graben.

Vorbereitungsarbeiten beginnen,

Benutzertabellenstruktur:

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;


Erscheint, wenn versucht wird, in Outfile Daten in Navicat zu exportieren Fehler:

select * from users into outfile 'users.txt'; //users.txt文件在mysql的dat

Wie unten gezeigt:

Ich habe online überprüft, ob es sich um die von MySQL festgelegte Berechtigung handelt. Sie können

Variablen wie „%secure%“ anzeigen; Überprüfen Sie, was der aktuelle Wert von secure-file-priv ist?

Sie können sehen, dass der Parameter secure-file-priv zum Begrenzen von LOAD DATA, SELECT .. verwendet wird. . OUTFILE und LOAD_FILE() Welches angegebene Verzeichnis, in das übertragen werden soll. Wenn der Wert von secure_file_priv null ist, bedeutet dies, dass der Import und Export von mysqld eingeschränkt ist. Wenn der Wert von secure_file_priv /tmp/ ist, bedeutet dies, dass der Import und Export von mysqld nur im Verzeichnis /tmp/ erfolgen kann Der Wert von secure_file_priv hat keinen spezifischen Wert. Dies bedeutet, dass es keine Einschränkungen für den Import/Export von mysqld gibt.

Die exportierten Daten müssen zuvor dem angegebenen Pfad dieses Werts entsprechen Es kann exportiert werden. Der Standardwert ist möglicherweise NULL (was ich hier sehe, ist null), was bedeutet, dass der Export verboten ist. Sie müssen ihn also festlegen.

Da ich die Datei my.ini unter phpstudy verwende, MySQL-Installationspfad, legen Sie den Pfad fest:

Hinweis: Fügen Sie dem Pfadnamen doppelte Anführungszeichen hinzu" "

Der Fehler bleibt nach dem Neustart derselbe...

Dieser Parameter ist in mysql.cnf nicht festgelegt, was bedeutet, dass dieser Parameter den Standardwert null hat

Versuchen Sie also, [mysqld] in mysql.cnf zu ändern, um secure_file_priv = hinzuzufügen

Das Endergebnis ist wie folgt:

MySQL erneut starten


Sie können sehen, dass „users.txt“ im Testdatenbankverzeichnis auf derselben Ebene generiert wird. . .

Dann führen Sie Folgendes aus:

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创建索引和删除索引的方法

Das obige ist der detaillierte Inhalt vonMySQL ermöglicht die schnelle Erstellung von Indizes für Millionen von Daten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn