특정 SELECT 쿼리에서 속도 향상을 위해 노력해 왔습니다. The situation is as follows: There is a (in my eyes) huge crossing table. It currently has about 20 million rows, but I expect this to grow alot. 이 교차 테이블을 기반으로 다른 테이블을 만들어야합니다. 이렇게하려면 다음 쿼리를 실행해야합니다.
SELECT hugeCrossingTable.field3, otherTable.field1, hugeCrossingTable.field2 * otherTable.field3 AS someName
FROM hugeCrossingTable
INNER JOIN otherTable ON hugeCrossingTable.field1 = otherTable.field2
이제 이것은 현재 약 백만 개의 행을 생성합니다. 두 테이블의 field1에 이미 인덱스가 있지만 완료하는 데 여전히 18 분이 걸립니다. 테이블 분할에 대해 생각했지만 데이터를 분할하는 방법을 찾아야합니다. 데이터를 분할하는 방법에 대한 방법을 찾아야합니다. 이것은 교차 테이블 일 뿐이므로이를 수행하는 방법에 대해서는 아무 생각도하지 않습니다.
이것이 어떻게 최적화 될 수 있는지에 대한 아이디어가 있습니까?
감사.
요청에 따라 다음은 create 문입니다.
CREATE TABLE `hugeCrossingTable` (
`field` int(11) NOT NULL,
`field1` int(11) NOT NULL,
`field2` double(10,5) DEFAULT NULL,
`field3` int(4) DEFAULT NULL,
KEY `field1` (`field1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `otherTable` (
`field` int(10) unsigned NOT NULL AUTO_INCREMENT,
`field1` int(10) unsigned NOT NULL,
`field2` int(10) unsigned NOT NULL,
`field3` decimal(5,2) NOT NULL,
PRIMARY KEY (`field`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
그리고 Explain 출력 :
id, select_type, table , type , possible_keys, key , key_len, ref , rows, Extra
1 , 'SIMPLE' , 'otherTable' , 'ALL', '' , '' , '' , '' , 294 , ''
1 , 'SIMPLE' , 'hugeCrossingTable', 'ref', 'field1' , 'field1', '4' , 'otherTable.field2', 69 , 'Using where'
해결 방법
다음은 약의 큰 테이블에서 작동하는 몇 가지 innodb 예제입니다. 잘 설계된 innodb 테이블의 장점과 클러스터형 인덱스를 가장 잘 사용하는 방법을 보여주는 60 ~ 5 억 행 (innodb에서만 사용 가능)
또한 다음을 읽어야합니다.
테이블 디자인을 분류하고 innodb 구성을 최적화했으면 :
다음과 같이 시도 할 수 있습니다.
start transaction;
insert into target_table (x,y) select x,y from source_table order by x,y;
commit;
도움이 되었기를 바랍니다.
참조 페이지 https://stackoverflow.com/questions/5557838
'MySql' 카테고리의 다른 글
MySQL mysql에서 longblob과 longtext의 차이점은 무엇입니까? (0) | 2020.10.12 |
---|---|
MySQL PHP에서 PDO 클래스로 num_rows를 얻는 문제 (0) | 2020.10.12 |
MySQL 내 SQL에서 "int"와 "int (2)"데이터 유형의 차이점 (0) | 2020.10.12 |
MySQL의 데이터베이스에서 모든 테이블 (모두 innodb)을 강제로 자르는 방법은 무엇입니까? (0) | 2020.10.12 |
MySQLi에서 참조로 매개 변수를 전달할 수 없습니다. (0) | 2020.10.12 |
댓글