내가 주위에 100,000 레코드가 테이블풀 텍스트 색인
CREATE TABLE `dataFullText` (
`id` int(11) NOT NULL,
`title` char(255) NOT NULL,
`description` text NOT NULL,
`name` char(100) NOT NULL,
`ref` char(50) NOT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `fulltext` (`ref`,`name`,`title`,`description`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
가 정말 느립니다.
mysql> select * from information_schema.TABLES WHERE TABLE_NAME='jobsFullText'\G
*************************** 1. row ***************************
TABLE_CATALOG: NULL
TABLE_SCHEMA: ****
TABLE_NAME: dataFullText
TABLE_TYPE: BASE TABLE
ENGINE: MyISAM
VERSION: 10
ROW_FORMAT: Dynamic
TABLE_ROWS: 79495
AVG_ROW_LENGTH: 791
DATA_LENGTH: 62938804
MAX_DATA_LENGTH: 281474976710655
INDEX_LENGTH: 53625856
DATA_FREE: 51328
AUTO_INCREMENT: NULL
CREATE_TIME: 2011-10-03 13:38:25
UPDATE_TIME: 2011-10-03 13:55:56
CHECK_TIME: 2011-10-03 13:38:48
TABLE_COLLATION: utf8_general_ci
CHECKSUM: NULL
CREATE_OPTIONS:
TABLE_COMMENT:
이 테이블은 약 8k 개의 레코드가있는 LOAD DATA INFILE로 매 시간마다 업데이트됩니다.
테이블이 잠기는 시간은 약 30 초입니다. 어떤 시간에 해당합니까
mysql> alter table dataFullText drop index title;
Query OK, 79495 rows affected (1.33 sec)
Records: 79495 Duplicates: 0 Warnings: 0
mysql> alter table dataFullText add fulltext index (ref,name,title,description);
Query OK, 79495 rows affected (22.96 sec)
Records: 79495 Duplicates: 0 Warnings: 0
내 문제는 30 초가 정말 긴 시간이라는 것입니다. 이 테이블은 5 회/초로 쿼리되어 대기열이 30 x 5 = 150에 도달합니다. Max 연결 한계가 100으로 설정되었으므로, mysql 서버는 들어오는 연결을 거부하기 시작합니다.
향후이 테이블에 최소 1 백만 행을 계획하고 있으므로 더 빨리 진행되지는 않을 것입니다.
mysql이 인덱스를 업데이트하는 데 걸리는 시간을 줄이려면 할 수있는 것이 있습니까?
모든 검색 기능에 Sphinx를 사용하기로 결정했습니다. MySQL보다 훨씬 더 빠릅니다. MySQL을 사용하여 데이터를 저장 및 구성하고 Sphinx를 사용하여 액세스합니다. MySQL => 쓰기, 스핑크스 => 읽기. – Ant