mysql百萬的數據快速建立索引

測試數據本機一張表users有100百萬條記錄。在建立此表前沒有未相應字段添加索引,因此此時須要爲表添加索引。可是由於數據量大的緣由,索引添加可能不成功,想了不少辦法,終於挖坑成功。php

開始準備工做,html

user表結構:mysql

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導出數據的時候出現錯誤:sql

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

以下圖:數據庫

上網查了一下是mysql設置的權限,可使用測試

show variables like '%secure%';查看 secure-file-priv 當前的值是什麼?spa

能夠看到secure-file-priv參數是用來限制LOAD DATA, SELECT ... OUTFILE, and LOAD_FILE()傳到哪一個指定目錄的。 當secure_file_priv的值爲null ,表示限制mysqld 不容許導入|導出 當secure_file_priv的值爲/tmp/ ,表示限制mysqld 的導入|導出只能發生在/tmp/目錄下 當secure_file_priv的值沒有具體值時,表示不對mysqld 的導入|導出作限制.3d

導出的數據必須是這個值的指定路徑才能夠導出,默認有多是NULL(我這裏查看的是null)就表明禁止導出,因此須要設置一下code

因爲我使用的是phpstudy,mysql安裝路徑下的my.ini文件,設置一下路徑:htm

注意:路徑名加雙引號" "
重啓後再次執行錯誤依舊.....

mysql.cnf中沒有對這個參數進行設定,就說明這個參數默認即是null
因此再嘗試修改mysql.cnf中的[mysqld]加入 secure_file_priv  = 
最終以下:

 

再次重啓mysql

能夠看到users.txt生成在同級test數據庫目錄。。。
接着執行:

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 鎖住狀況下,或對外服務暫停時使用,線上不可能直接這樣玩了。。

相關文章
相關標籤/搜索