Heim >Datenbank >MySQL-Tutorial >MySQL ermöglicht die schnelle Erstellung von Indizes für Millionen von Daten
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...
Versuchen Sie also, [mysqld] in mysql.cnf zu ändern, um secure_file_priv = hinzuzufügen
Das Endergebnis ist wie folgt:
MySQL erneut starten
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 锁住情况下,或对外服务暂停时使用,线上不可能直接这样玩了。
相关推荐:
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!