2

내가 주위에 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이 인덱스를 업데이트하는 데 걸리는 시간을 줄이려면 할 수있는 것이 있습니까?

+0

모든 검색 기능에 Sphinx를 사용하기로 결정했습니다. MySQL보다 훨씬 더 빠릅니다. MySQL을 사용하여 데이터를 저장 및 구성하고 Sphinx를 사용하여 액세스합니다. MySQL => 쓰기, 스핑크스 => 읽기. – Ant

답변

0

일반적인 SQL DBMS에서는 이와 같이 테이블을 완전히 인덱싱해도 도움이되지 않습니다. 인덱스는 실제로 테이블 자체보다 크며 인덱스에 액세스하는 데 걸리는 시간은 인덱스가없는 테이블에 액세스하는 시간보다 훨씬 길어집니다.

이제 설치량은 RAM 용량, 시스템의 전체 속도에 따라 다릅니다. 색인을 추가하기 전에 색인을 업데이트/재생성하는 속도가 느립니다. 현재 사용하고있는 특정 조건에서 가치가 있는지 확인하십시오.