mysql完成百萬的數(shù)據(jù)迅速創(chuàng)建索引
發(fā)表時間:2023-07-14 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]測試數(shù)據(jù)本機一張表users有100百萬條記錄。在創(chuàng)建此表前沒有未相應(yīng)字段添加索引,所以此時需要為表添加索引。但是因為數(shù)據(jù)量大的原因,索引添加可能不成功,想了很多辦法,終于挖坑成功。開始準(zhǔn)備工作,u...
測試數(shù)據(jù)本機一張表users有100百萬條記錄。在創(chuàng)建此表前沒有未相應(yīng)字段添加索引,所以此時需要為表添加索引。但是因為數(shù)據(jù)量大的原因,索引添加可能不成功,想了很多辦法,終于挖坑成功。
開始準(zhǔn)備工作,
user表結(jié)構(gòu):
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;
嘗試在navicat中使用 into outfile導(dǎo)出數(shù)據(jù)的時候出現(xiàn)錯誤:
select * from users into outfile 'users.txt'; //users.txt文件在mysql的dat
如下圖:
上網(wǎng)查了一下是mysql設(shè)置的權(quán)限,可以使用
show variables like '%secure%';查看 secure-file-priv 當(dāng)前的值是什么?
可以看到secure-file-priv參數(shù)是用來限制LOAD DATA, SELECT ... OUTFILE, and LOAD_FILE()傳到哪個指定目錄的。 當(dāng)secure_file_priv的值為null ,表示限制mysqld 不允許導(dǎo)入 導(dǎo)出 當(dāng)secure_file_priv的值為/tmp/ ,表示限制mysqld 的導(dǎo)入 導(dǎo)出只能發(fā)生在/tmp/目錄下 當(dāng)secure_file_priv的值沒有具體值時,表示不對mysqld 的導(dǎo)入 導(dǎo)出做限制.
導(dǎo)出的數(shù)據(jù)必須是這個值的指定路徑才可以導(dǎo)出,默認有可能是NULL(我這里查看的是null)就代表禁止導(dǎo)出,所以需要設(shè)置一下
由于我使用的是phpstudy,mysql安裝路徑下的my.ini文件,設(shè)置一下路徑:
注意:路徑名加雙引號" "
重啟后再次執(zhí)行錯誤依舊.....
mysql.cnf中沒有對這個參數(shù)進行設(shè)定,就說明這個參數(shù)默認便是null
所以再嘗試修改mysql.cnf中的[mysqld]加入secure_file_priv =
最終如下:
再次重啟mysql
可以看到users.txt生成在同級test數(shù)據(jù)庫目錄。。。
接著執(zhí)行:
truncate users;
創(chuàng)建索引:
create index name using BTREE on users(name);
索引的方式有:BTREE、RTREE、HASH、FULLTEXT、SPATIAL,這里不再贅述他們的區(qū)別,網(wǎng)上有很多關(guān)于這塊的介紹啦
導(dǎo)入文件到相應(yīng)表users。
load data infile 'users.txt' into table users;
此方式在write 鎖住情況下,或?qū)ν夥⻊?wù)暫停時使用,線上不可能直接這樣玩了。
相關(guān)推薦:
MySQL創(chuàng)建索引和刪除索引的方法
以上就是mysql實現(xiàn)百萬的數(shù)據(jù)快速創(chuàng)建索引的詳細內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
學(xué)習(xí)教程快速掌握從入門到精通的SQL知識。