테스트 데이터는 1억 건의 레코드를 보유한 로컬 테이블 사용자입니다. 이 테이블을 생성하기 전에는 해당 필드에 추가된 인덱스가 없으므로 이때 테이블에 인덱스를 추가해야 합니다. 하지만 데이터의 양이 많아서 인덱스 추가가 성공하지 못할 수도 있습니다. 여러가지 고민 끝에 구멍을 파는데 성공했습니다.
준비 작업을 시작하세요.
사용자 테이블 구조:
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에서 데이터를 내보내기 위해 outfile에 사용하려고 할 때 오류가 발생했습니다:
select * from users into outfile 'users.txt'; //users.txt文件在mysql的dat
아래 그림과 같습니다:
온라인으로 확인하고 mysql 설정 권한입니다.
'%secure%'와 같은 변수 표시를 사용하면 secure-file-priv의 현재 값이 무엇인지 확인할 수 있습니다.
secure-file-priv 매개변수가 사용되는 것을 볼 수 있습니다. LOAD DATA, SELECT... OUTFILE 및 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 =
를 추가해 보십시오. 최종 결과는 다음과 같습니다. 보시죠 users.txt는 동일한 수준의 테스트 데이터베이스 디렉터리에 생성됩니다. . .
그런 다음 실행: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을 사용하면 수백만 개의 데이터에 대한 인덱스를 빠르게 생성할 수 있습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!