mysql實現百萬的資料快速建立索引

小云云
發布: 2018-03-27 15:17:06
原創
2658 人瀏覽過

測試資料本機一張表users有100百萬筆記錄。在建立此表之前沒有未對應欄位新增索引,所以此時需要為資料表新增索引。但是因為資料量大的原因,索引添加可能不成功,想了很多辦法,終於挖坑成功。

開始準備工作,

user表結構:

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匯出資料的時候出現錯誤:

select * from users into outfile 'users.txt'; //users.txt文件在mysql的dat
登入後複製

如下圖:

上網查了一下是mysql設定的權限,可以用

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

可以看到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 的導入|導出做限制.

導出的資料必須是這個值的指定路徑才可以導出,預設有可能是NULL(我這裡查看的是null )就代表禁止導出,所以需要設定一下

由於我使用的是phpstudy,mysql安裝路徑下的my.ini文件,設定一下路徑:

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

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

相关推荐:

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

以上是mysql實現百萬的資料快速建立索引的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板