로그를 저장할 필드가 MEDIUMTEXT
인 테이블이 있습니다. 로그 필드가 커짐으로 잘 작동 짧은 로그의읽지 않은 MySQL CONCAT
UPDATE tbl SET log = CONCAT(log, 'newtext')
,하지만 시간이 지남에 따라, 그것은 기하 급수적으로 속도가 느려 다음과 같이
나는 로그에 데이터를 추가하고 있습니다. MySQL이 전체 필드를 읽고 나서 모든 것을 다시 쓰는 것 같습니다.
성능에 문제없이 로그에 데이터를 추가하려면 어떻게해야합니까? 이를 달성 할 수있는 방법이 없다면 텍스트 데이터의 큰 덩어리를 어떻게 저장하고 업데이트 할 수 있습니까? (내가 추측하고있어 이후
이1 - Retrieve the existing value of `log`,
2 - Concatenate the retrieved value with the new one,
3 - Store the result of "2" back in the same row.
(실제로는 짧은 손 형식에서 수행) : 당신이 생각하는 경우
단순히 1,2,3보다 나쁘다 - 이전 행을 제거해야하며 더 큰 새 행에 공간을 할당해야합니다. –
귀하의 의견을 이해하는 @RickJames를 모르십니까? 성능 문제는 각 INSERT에서 발생하는 연결에서 발생합니다. 각 SELECT에 대해 INSERTS가 매우 많다는 가정하에 제안 된 방법으로 성능이 확실히 향상 될 것입니다 (이전에이 작업을 수행했으며 개선은 매우 중요 함). 내가 너를 완전히 오해 한 경우, 분명히 말하십시오. – FDavidov
다른 말로 표현하기 - 3 단계는 표면에 나타나는 것보다 비용이 많이 든다. 저장 공간 (InnoDB 용 블록, MyISAM 용 스트림)으로 인해 더 큰 새로운 행을 저장하면 블록 분할과 다른 '비용이 많이 드는'작업이 발생할 수 있습니다. (우리는 합의에 도달했으며, 나는 당신의 대답을 좋아합니다.) –